提问人:Kakarotto 提问时间:6/5/2020 最后编辑:Kakarotto 更新时间:6/5/2020 访问量:313
如何使用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;
}
答:
0赞
Joseph Pilliner
6/5/2020
#1
它这样做是因为测试从文件中读取的数字是否是 ,而不是是否已到达文件末尾。while(num != EOF)
int num
EOF
要测试是否在 FILE *
ifp 上设置了 EOF 标志,请改用 while(!feof(ifp))。
评论
0赞
Kakarotto
6/5/2020
嘿!谢谢你的帮助。我应该做while循环还是在do-while循环的末尾添加它?感谢
3赞
0___________
6/5/2020
不不不 stackoverflow.com/questions/5431941/......
1赞
Shubham
6/5/2020
是的,我强烈建议您阅读该帖子,该帖子由P_J_链接
0赞
Joseph Pilliner
6/5/2020
@P__J__我没有考虑并发,我将编辑我的帖子以反映我建议的不是最佳实践。但是,我所说的第一部分仍然是正确的。
2赞
0___________
6/5/2020
#2
您需要检查结果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);
评论
0赞
Kakarotto
6/5/2020
嘿!谢谢,我做了这些更改,现在不打印.我检查了他的调试器,并注意到它进入了第 25 行*
scanf error
2赞
0___________
6/5/2020
所以你的文件有问题。扫描失败。始终检查任何 I/O 操作的结果
0赞
Shubham
6/5/2020
#3
相反,您应该尝试循环。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;
}
0赞
Catch22
6/5/2020
#4
你试过这个吗:
while (!feof(ifp)) {
if (fscanf(ifp, "%d ", &num) > 0) {
if(num % 2 != 0) // For every odd number.
{
printf("*\n");
}
}
}
评论
*