检查如果文件指针到达EOF不移动文件指针?

问题描述 投票:4回答:6

我的问题很简单,但我无法找到它的谷歌,所以我在这里。

基本上,作为一个例子,我在一堆整数的读出,直到从输入文件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!

c pointers input integer eof
6个回答
7
投票

fgetc返回当前由指定流的内部文件位置指示器指示的字符。内部文件位置指示器然后前进到下一个character.Using do{ }while();将解决你的问题。


5
投票

你应该考虑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);
}

特别是对于调试,它可以是很好的事情分成与变量分别发表声明,可以进行检查。


3
投票

由于各种原因,这是不可能的,以确定是否EOF一直没有真正从文件执行前一个读取达到。

然而,使用单独的函数调用做,这是一个坏主意,即使你使用ungetc()放回你试图读取字符。

相反,检查调用fscanf()本身的返回值:

while(fscanf(ifp, "%d", &test) == 1)
{
    printf("%d\n", test);
}

3
投票

如何简单地说:

while (fscanf (ifp, "%d", &test) != EOF)
    printf("%d\n", test);

2
投票

fgetc(ifp)提前文件指针,因此跳过你的第一个整数

改用: -

while(1)
{

    if(fscanf(ifp, "%d", &test)!=1) 
         break;
    printf("%d\n", test);
}

© www.soinside.com 2019 - 2024. All rights reserved.