Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2010, 05:25   #1
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию меняем глобальный на неглобальный

Доброго времени суток !
Нашел интересный исходник(catdir(программа для отображения содержимого каталога)по GPL распространяется) ,решил использовать в своих целях, но указатель( переменная)
char *myname;
задана глобально;(т.е перед функциями)
Не подскажите как можно организовать ввод пользователем
Код:
printf("ВВедите директорию для просмотра :\n"); 
scanf("%s" ,&myname);
Вот исходник :
Код:
#include <errno.h>//для вывода ошибок                                                                                                                                     
#include <sys/types.h>//для системных ошибок                                                                                                                              
#include <dirent.h>//функция задания каталога                                                                                                                             
#include <stdio.h>
char *myname; // глобальная переменная (если я правильно понял)                                                                                                                    

int process(char *dir);

int main(int argc,char **argv)
{
  char *myname;
  int i ;
  int errs = 0;
  myname = argv[0];
  if (argc == 1)
    errs = process("."); //по умолчанию - текущий каталог                                                                                                                 
  else
    for (i=1;i < argc; i++)
      errs +=process(argv[i]);
  return (errs!=0);
}
/*-process() -сделать что -то с каталогом ->вывести пары                                                                                                                                          
 * индекс/имя в стандартный вывод                                                                                                                                                                 
 * Если все OK возвращает 0 ; при ошибке 1                                                                                                                                                        
 */
int process(char *dir)
{
  DIR *dp;
  struct dirent *ent;//подключим "массив элементов" типа char с именами d_name и d_ino                                                                                                            

  if ((dp = opendir(dir)) == NULL) {
    fprintf(stderr, "%s: %s:не могу открыть для чтения : %s\n",myname , dir, strerror(errno));
    return 1;
}

  errno = 0;
  while ((ent = readdir(dp)) != NULL)
    printf("%8ld %s \n", ent->d_ino, ent->d_name);

  if (errno != 0){
    fprintf(stderr, "%s: %s: чтение каталогов записи: %s\n ",myname,dir,strerror(errno));
    return 1;
  }
  if (closedir(dp) != 0){
    fprintf(stderr, "%s: %s: closedir: %s\n", myname ,dir ,strerror(errno));
    return 1;
 }
  return 0;
}
rowlin вне форума Ответить с цитированием
Старый 27.12.2010, 09:29   #2
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

объявите внутри программы свою переменную, можно даже с таким же именем
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 27.12.2010, 15:28   #3
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

вопрос не понял, тебе куда надо ввод делать в глобальную или куда?
у тебя 2 переменные myname одна глобальная другая локальная в теле main
UltimaBeaR вне форума Ответить с цитированием
Старый 27.12.2010, 18:26   #4
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию

то есть ввести переменную(myname) в виде массива?(я правильно понял)
Код:
int main(/*int argc,char **argv*/)
{
  int el;
  char myname[el];
  printf("ВВедите директорию для просмотра :\n");
  el =0;
  int arg;
 while (myname[el] != EOF){ //eof - enter                                                                                                                                                         
   arg=el++;
    scanf("%s",&myname[el]);
  }
  int errs =0;
  int i;
  if (arg == 1)
    errs = process("."); //по умолчанию - текущий каталог                                                                                                                                         
  else
    for (i=1;i < arg; i++)
      errs +=process(myname[i]);
  return (errs!=0);
}

UltimaBeaR
да не вродь 1 переменная
Код:
(gbd) run /home//так задается
char *myname; // глобальная переменная 
int main(int argc,char **argv)//используется в main
  char *myname;
  myname = argv[0];//и определяется как массив 
errs +=process(myname[i]);//далее идет в process()
вродь как-то так

Последний раз редактировалось rowlin; 27.12.2010 в 18:29.
rowlin вне форума Ответить с цитированием
Старый 27.12.2010, 22:43   #5
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию

помогите разобраться
после изменения (/^/)получил ряд ошибок=(
Код:
g++ main.c
main.c: In function ‘int main()’:
main.c:23: error: invalid conversion from ‘const char*’ to ‘char’ //а именно вот это непонятно 
main.c:23: error:   initializing argument 1 of ‘int process(char)’
main.c: In function ‘int process(char)’:
main.c:35: error: aggregate ‘DIR dp’ has incomplete type and cannot be defined
main.c:38: error: invalid conversion from ‘char’ to ‘const char*’
main.c:38: error:   initializing argument 1 of ‘DIR* opendir(const char*)’
main.c:39: error: ‘strerror’ was not declared in this scope
main.c:48: error: ‘strerror’ was not declared in this scope//после подключению #include <string.h> 'этого не стало
main.c:52: error: ‘strerror’ was not declared in this scope

Последний раз редактировалось rowlin; 27.12.2010 в 22:47.
rowlin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Меняем пароли Alar О форуме и сайтах клуба 39 10.07.2010 21:16
Глобальный хук на мышь не глобальный О_о JTG Общие вопросы Delphi 3 05.06.2008 17:41
Меняем Explorer Veiron Свободное общение 4 19.05.2008 12:51
Меняем иконку у программки. celovec Общие вопросы Delphi 4 01.07.2007 19:06
меняем CS:IP Shacal Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 11.01.2007 20:18