如何使用 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");
}
}
}
我正在学习 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");
}
}
}