如何使用 EOF 从文件中读取所有数据

How to use EOF to read all data from file

我正在学习 C 语言的文件 i/o,我编写了这个读取文件的程序,然后对于找到的每个偶数,它必须将 * 打印到屏幕上。

我的问题是我的程序一直在打印 *

我尝试了不同的方法,有些来自这个网站,但我似乎无法理解如何使用 EOF 读取文本文件的结尾。

我想学习如何阅读文本文件直到文件结束。 如何阅读到文本文件的末尾? C 中的 EOF


int main(void)
 {

     int num;
     FILE *ifp;

     ifp = fopen("numbers.txt", "r" );

     if(ifp == NULL)
     {
         exit(1);
     }

     do
     {
         fscanf(ifp, "%d", &num);       

            if(num%2 == 0)

                {
                printf("*\n");
                }
        } while(num != EOF);


    fclose(ifp);

    return 0;
}

这样做是因为 while(num != EOF) 正在测试从文件中读取的数字 int num 是否为 EOF,而不是是否已到达文件末尾。

要测试是否在 FILE *ifp 上设置了 EOF 标志,请改用 while(!feof(ifp))

您需要检查 scanf

的结果
     do
     {
         int result;
         result = fscanf(ifp, "%d", &num);       
         if(result == EOF) break;

         if(result != 1) 
         {
             printf("scanf error\n");
             break;
         }
         if(num%2 == 0)
         {
              printf("*\n");
         }
      } while(1);

相反,您应该尝试 while 循环。

#include <stdio.h>
#include <stdlib.h>

int main(void)
 {

     int num;
     FILE *ifp;

     ifp = fopen("numbers.txt", "r" );

     if(ifp == NULL)
     {
         perror("Read");
         exit(1);
     }

     while(fscanf(ifp, "%d ", &num) != EOF)
     {

         if(num % 2 != 0) // For every odd number.

                {
                printf("*\n");
                }
     }
    fclose(ifp);

    return 0;
}

你试过这个吗:

while (!feof(ifp)) {
   if (fscanf(ifp, "%d ", &num) > 0) {
      if(num % 2 != 0) // For every odd number.
                {
                printf("*\n");
                }
   }
}