我的问题很简单,但我无法找到它的谷歌,所以我在这里。
基本上,作为一个例子,我在一堆整数的读出,直到从输入文件EOF。我用龟etc检查,但随后将文件移动指针,第二个整数的地址。我如何检查EOF在这个while循环,而无需移动文件指针时,它会检查?
请记住,我会做一些与此环比整数扫描要复杂得多。另外,不要提我使用的fscanf而不是与fgets,我知道了。它只是一个简单的例子,向你展示我的意思。
while(fgetc(ifp) != EOF)
{
fscanf(ifp, "%d", &test);
printf("%d\n", test);
}
如果输入文件有整数1-10例如,上面的代码将打印:
2 3 4 5 6 7 8 9 10
失踪的1!
fgetc
返回当前由指定流的内部文件位置指示器指示的字符。内部文件位置指示器然后前进到下一个character.Using do{ }while();
将解决你的问题。
你应该考虑EOF条件,是一个实现细节。什么是真正重要的是在这里是否的fscanf已成功返回值。
while(fscanf(ifp, "%d", &test) == 1) {
printf("%d\n", test);
}
在另一方面,这种感觉就像在有意义把逻辑循环的中间这样的一个时期。
while(1) {
int ret = fscanf(ifp, "%d", &test);
if (ret != 1)
break;
printf("%d\n", test);
}
特别是对于调试,它可以是很好的事情分成与变量分别发表声明,可以进行检查。
由于各种原因,这是不可能的,以确定是否EOF一直没有真正从文件执行前一个读取达到。
然而,使用单独的函数调用做,这是一个坏主意,即使你使用ungetc()
放回你试图读取字符。
相反,检查调用fscanf()
本身的返回值:
while(fscanf(ifp, "%d", &test) == 1)
{
printf("%d\n", test);
}
如何简单地说:
while (fscanf (ifp, "%d", &test) != EOF)
printf("%d\n", test);
fgetc(ifp)
提前文件指针,因此跳过你的第一个整数
改用: -
while(1)
{
if(fscanf(ifp, "%d", &test)!=1)
break;
printf("%d\n", test);
}