Действительно ли feof() действительно полезно в этом сценарии? Я не могу найти его применение
Я пытался прочитать данные из test.txt и вывести их на экран консоли. Текстовые файлы Данные:
DCA 12 50
DCB 60 70
DCC 70 90
Решение 1. Приведенный ниже код работает нормально, но возвращает неправильные данные, если сам файл пуст.
FILE *fptr;
fptr = fopen("test.txt", "r");
if (fptr == NULL)
{
printf("Error\n");
exit(-1);
}
while (!feof(fptr))
{
fscanf(fptr, "%s %d %d", &name, &num, &num2);
printf("Name :%s Num :%d Num2: %d\n", name, num, num2);
};
fclose(fptr);
Итак, что произошло дальше, мой преподаватель предложил мне это решение (Решение 2), которое позже заставляет систему пропустить запись во время операции вывода на экран консоли.
FILE *fptr;
fptr = fopen("test.txt", "r");
if (fptr == NULL)
{
printf("Error\n");
exit(-1);
}
fscanf(fptr, "%s %d %d", &name, &num, &num2);
while (!feof(fptr))
{
printf("Name :%s Num :%d Num2: %d\n", name, num, num2);
fscanf(fptr, "%s %d %d", &name, &num, &num2);
};
fclose(fptr);
Решение 3 Вот еще один подход, который решил вышеуказанные проблемы.
FILE *fptr;
fptr = fopen("test.txt", "r");
if (fptr == NULL)
{
printf("Error\n");
exit(-1);
}
while (fscanf(fptr, "%s %d %d", &name, &num, &num2)!= EOF)
{
printf("Name :%s Num :%d Num2: %d\n", name, num, num2);
};
fclose(fptr);
но мне интересно, это единственный способ решить упомянутую проблему? Или есть способ проверить EOF с помощью функции feof()? Мой преподаватель утверждал, что в Solution 2 нет ничего плохого в логике, кроме самой IDE(Microsoft Visual Studio)? Я был настроен скептически и провел некоторое исследование, но не смог найти источников, подтверждающих достоверность.