Передача результата из файла в другой файл - PullRequest
0 голосов
/ 02 мая 2018

Приветствие. я Я создал файл, который запрашивает имя и возраст, я хочу извлечь количество возрастов, которые были введены в файл, и это число распечатать его в другом файле. Я знаю, что могу рассчитывать, основываясь на количестве имен или даже разах, когда я запрашивал информацию, но мне нужно посчитать, сколько возрастов я получил, основываясь на числе, в данном случае int , и распечатать его в другом файле. Вот мой код:

#define T 50
#define A 5
void main ()
{
   FILE *ap=NULL, *ap2=NULL;
   char cad[T];
   int age, x,cont=0;

   ap=fopen("Dat.txt", "w+"); //Open File
   if(ap==NULL)
   {  printf("Cant open the file");
      getch();
      exit(1);
   }
   ap2=fopen("Ages.txt","w"); //Open File
   if(ap2==NULL)
   {  printf("Cant open the file");
      getch();
      exit(1);
   }
   for(x=0;x<A;x++) //Gets the information
   {  printf("Name: ");
      gets(cad);
      printf("Age: ");
      scanf("%d",&age);
      fflush(stdin);
      fprintf(ap,"%-30s %d\n",cad,age);
   }
   rewind(ap);
   fgets(cad,T,ap);
   while(!feof(ap))     //Start counting the ages
   {  fscanf(ap,"%d",&age);
      ++cont;
   }
   fprintf(ap2,"%d", cont);

   fclose(ap); fclose(ap2); //Close both Files

Работает нормально, создавая файл "Dat.txt" со всей информацией, если я комментирую последние 6 строк кода (кроме fclose ), но, похоже, он входит в цикл, потому что он не ничего не делать, когда я закончу ввод информации.

1 Ответ

0 голосов
/ 02 мая 2018

Th проблема в линии fscanf(ap,"%d",&age); из while цикла. Это потому, что вы написали строковый кулак и ожидаете прочитать int.

Замените его следующим фрагментом кода, и он решит вашу проблему:

...
rewind(ap);
fgets(cad,T,ap);
while(!feof(ap))     //Start counting the ages
{
   //Move pointer to 30, Since while writing to file width is set to 30(%-30s) 
   age = atoi(cad+30); 
   printf("%d\n",age);
   ++cont;
   fgets(cad,T, ap);
}
fprintf(ap2,"%d", cont);
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...