Почему последняя строка в файле печатается дважды на экране при получении данных?

Я написал следующий код C, чтобы записать пять имен в текстовый файл и напечатать их на мониторе. При чтении данных из файла последняя строка печатается дважды на экране. Но почему..

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

void main()
{
  FILE *fp1, *fp2, *fp3;
  char name[10];
  int n,c;
  clrscr();

  printf("How many names..\n");
  scanf("%d", &n);

  fp1 = fopen("source.txt", "w");

  while( n > 0 )
  {
    fflush(stdin);
    printf("Enter the name\n");
    gets(name);
    fprintf(fp1,"%s\n", name);
    n--;
  }

  fclose(fp1);
  fp1 = fopen("source.txt", "r");
  printf(" You entered the following names\n");

  while( !feof(fp1) )
  {
    fscanf(fp1, "%s", name);
    printf("%s\t", name);
  }

  getch();
}

1 ответ

Потому что вы не читали руководство по feof.

Версия C feof автоматически не возвращает true, когда вы находитесь в конце файла. Он вернет true после того, как вы попытаетесь прочитать что-то, только чтобы найти больше данных для чтения.

"Feof" на других языках может быть немного проще в использовании. Например, eof Perl вернет 1, если следующее чтение FILEHANDLE вернет конец файла...

Другие вопросы по тегам