Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача имени файла из командной строки, Помогите пожалуйста найти ошибку 
V
    Опции темы
Josh
Дата 11.5.2006, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 6.5.2006

Репутация: нет
Всего: нет



Пытаюсь передать имя файла из командной строки при запуске программы. На что последняя ругается и говорит что файла такого нет. Подскажите пожалуйста что я упустил... 
Код

#include <stdio.h>
#include <conio.h>

void WriteToFile(char *);
int CountLines(char *);

int main(char *argv[])
{
FILE *inp_file;     //pointer to file
char *file;
float  temp = 0,
       min_number = 0,
       max_number = 0,
       sum = 0,
       lines = 0;
file=argv[1];
WriteToFile(file);
 if((inp_file = fopen(file,"r")) == NULL)  // if there is no file
  {
  perror(file);
  getch();
  return 1;
  }

  lines = CountLines(file);     // how much lines (numbers) in file
  fscanf(inp_file,"%f",&max_number); // read first element and
  min_number = max_number;           // it will be min and max
  fseek(inp_file, 0, SEEK_SET);      // set cursor to begin
  for(int i=0;i<lines;i++)
  {
    fscanf(inp_file, "%f", &temp);  // READ NUMBERS
    printf("%.2f\n",temp);          // PRINT NUMBERS
    if(temp > max_number) max_number=temp; // search max
    if(temp < min_number) min_number=temp; // search min
  }
  sum = min_number + max_number;
  printf("\n%.2f + %.2f = %.2f",max_number,min_number,sum);
fclose(inp_file);
getch();
return 0;
}

void WriteToFile(char *file)
{
FILE* inp_file = fopen(file, "w");       // OPEN FOR WRITE
float somevalue = 0;
int n = 0;                               // number of values
printf("how many values? ");
scanf("%d",&n);
for(int i=0;i<n;i++)
  {
  printf("value =  ");
  scanf("%f",&somevalue);
  fprintf(inp_file, "%f\n", somevalue);// write it to file
  }
  fclose(inp_file);
}

int CountLines(char *file)
{                              // COUNT LINES IN FILE
FILE *inp_file = fopen(file,"r");
 int not_emty_line = 0, lines = 0;
   do
   {
   not_emty_line = 0;
   while(fgetc(inp_file)!='\n' && !feof(inp_file)) not_emty_line=1;
       if(not_emty_line) lines++;
   }
   while(!feof(inp_file));
 fclose(inp_file);
 return (lines);
}
 
PM MAIL   Вверх
AntonChik
Дата 11.5.2006, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 4.10.2005
Где: Красноярск

Репутация: нет
Всего: 1



файл здесь же лежит? или полный путь?
если полный, то могут быть проблемы со слэшами....
да и посмотри после строки file=argv[1] че получилось... подцепился ли аргумент
а под file не надо памяти выделить децл?
 
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
likehood
Дата 11.5.2006, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



у функции main должно быть 2 параметра:
Код

int main(int argc, char *argv[])

argc - реальное число аргументов командной строки. 
PM MAIL   Вверх
Fazil6
Дата 11.5.2006, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



а так 
Код

int main(int argc, char *argv[])

 
PM MAIL   Вверх
Josh
Дата 11.5.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 6.5.2006

Репутация: нет
Всего: нет



Файл нигде не лежит его необходимо создать в ходе выполнения программы. Создан он должен быть в той же директории, откуда запущена программа. В main исправил тем не менее прога ругается на то что файла нет  smile 
 
PM MAIL   Вверх
Josh
Дата 11.5.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 6.5.2006

Репутация: нет
Всего: нет



Попробовал переделать. Никак, та же самая ошибка. Помогите пожалуйста !!!
Код

#include <stdio.h>
#include <conio.h>

void WriteToFile(char *);
int CountLines(char *);
FILE *OpenFile (char *name, char *mode);

int main(int argc, char *argv[])
{
FILE *inp_file;     //pointer to file
FILE *file
float  temp = 0,
       min_number = 0,
       max_number = 0,
       sum = 0,
       lines = 0;
file=OpenFile(argv[1],"w")
WriteToFile(file);
 if((inp_file = fopen(file,"r")) == NULL)  // if there is no file
  {
  perror(file]);
  getch();
  return 1;
  }

  lines = CountLines(file);     // how much lines (numbers) in file
  fscanf(inp_file,"%f",&max_number); // read first element and
  min_number = max_number;           // it will be min and max
  fseek(inp_file, 0, SEEK_SET);      // set cursor to begin
  for(int i=0;i<lines;i++)
  {
    fscanf(inp_file, "%f", &temp);  // READ NUMBERS
    printf("%.2f\n",temp);          // PRINT NUMBERS
    if(temp > max_number) max_number=temp; // search max
    if(temp < min_number) min_number=temp; // search min
  }
  sum = min_number + max_number;
  printf("\n%.2f + %.2f = %.2f",max_number,min_number,sum);
fclose(inp_file);
getch();
return 0;
}

void WriteToFile(char *file)
{
FILE* inp_file = fopen(file, "w");       // OPEN FOR WRITE
float somevalue = 0;
int n = 0;                               // number of values
printf("how many values? ");
scanf("%d",&n);
for(int i=0;i<n;i++)
  {
  printf("value =  ");
  scanf("%f",&somevalue);
  fprintf(inp_file, "%f\n", somevalue);// write it to file
  }
  fclose(inp_file);
}

int CountLines(char *file)
{                              // COUNT LINES IN FILE
FILE *inp_file = fopen(file,"r");
 int not_emty_line = 0, lines = 0;
   do
   {
   not_emty_line = 0;
   while(fgetc(inp_file)!='\n' && !feof(inp_file)) not_emty_line=1;
       if(not_emty_line) lines++;
   }
   while(!feof(inp_file));
 fclose(inp_file);
 return (lines);
}

FILE *OpenFile (char *name, char  *mode) 
{
 FILE *fp;
 fp=fopen(name,mode);
 if (fp== NULL ) {
 printf("I can't read that file %s\n",name);
 printf("For exit you must press any key\n");
 getch();  exit(1);}
 return fp; 
}
 
PM MAIL   Вверх
Fazil6
Дата 11.5.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



исправил только самые критические огрехи чтобы компилировалось и работало. Вобщем работает
Код

#include <stdio.h>    
#include <conio.h>    
void WriteToFile(char *);    
int CountLines(char *);    
FILE *OpenFile (char *name, char *mode);    
int main(int argc, char *argv[])    
{    
    FILE *inp_file;     //pointer to file    
    FILE *file    ;
        float  temp = 0,    
        min_number = 0,    
        max_number = 0,    
        sum = 0;    
            
    file=OpenFile(argv[1],"w")    ;
        WriteToFile(argv[1]);    
    if((inp_file = fopen(argv[1],"r")) == NULL)  // if there is no file    
    {    
        perror("No file");    
        getch();    
        return 1;    
    }    
    int lines = CountLines(argv[1]);     // how much lines (numbers) in file    
    fscanf(inp_file,"%f",&max_number); // read first element and    
    min_number = max_number;           // it will be min and max    
    fseek(inp_file, 0, SEEK_SET);      // set cursor to begin    
    for(int i=0;i<lines;i++)    
    {    
        fscanf(inp_file, "%f", &temp);  // READ NUMBERS    
        printf("%.2f\n",temp);          // PRINT NUMBERS    
        if(temp > max_number) max_number=temp; // search max    
        if(temp < min_number) min_number=temp; // search min    
    }    
    sum = min_number + max_number;    
    printf("\n%.2f + %.2f = %.2f",max_number,min_number,sum);    
    fclose(inp_file);    
    getch();    
    return 0;    
}    
void WriteToFile(char *file)    
{    
    FILE* inp_file = fopen(file, "w");       // OPEN FOR WRITE    
    float somevalue = 0;    
    int n = 0;                               // number of values    
    printf("how many values? ");    
    scanf("%d",&n);    
    for(int i=0;i<n;i++)    
    {    
        printf("value =  ");    
        scanf("%f",&somevalue);    
        fprintf(inp_file, "%f\n", somevalue);// write it to file    
    }    
    fclose(inp_file);    
}    
int CountLines(char *file)    
{                              // COUNT LINES IN FILE    
    FILE *inp_file = fopen(file,"r");    
    int not_emty_line = 0, lines = 0;    
    do    
    {    
        not_emty_line = 0;    
        while(fgetc(inp_file)!='\n' && !feof(inp_file)) not_emty_line=1;    
        if(not_emty_line) lines++;    
    }    
    while(!feof(inp_file));    
    fclose(inp_file);    
    return (lines);    
}    
FILE *OpenFile (char *name, char  *mode)    
{    
    FILE *fp;    
    fp=fopen(name,mode);    
    if (fp== NULL ) {    
        printf("I can't read that file %s\n",name);    
        printf("For exit you must press any key\n");    
        getch();  }    
    return fp;    
}
 
PM MAIL   Вверх
Josh
Дата 11.5.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 6.5.2006

Репутация: нет
Всего: нет



А какие еще ошибки остались? 
PM MAIL   Вверх
Fazil6
Дата 11.5.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

А какие еще ошибки остались? 

да я не проверял, но судя по тем, что были вероятность наличия еще ошибок высокая 
PM MAIL   Вверх
Josh
Дата 11.5.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 6.5.2006

Репутация: нет
Всего: нет



Да вроде все OK, отсалось только причесать немного. Ошибок не спорю много, времени по нулям, поэтому и делается все второпях...

Fazil6,  RESPECT !!! 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0743 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.