Действительно ли 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)? Я был настроен скептически и провел некоторое исследование, но не смог найти источников, подтверждающих достоверность.

0 ответов

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