在不移动文件指针的情况下检查文件指针是否已达到EOF?

Kar*_*ikh 4 c pointers integer input eof

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

基本上,作为一个例子,我正在读取一堆整数,直到输入文件中的EOF.我使用fgetc来检查,但随后它将文件指针移动到第二个整数的地址.如何检查此while循环中的EOF而不检查文件指针?

请记住,我将使用此循环执行比使用整数扫描更复杂的操作.另外,我不知道我使用fscanf而不是fgets.它只是一个简单的例子,向您展示我的意思.

while(fgetc(ifp) != EOF)
{

    fscanf(ifp, "%d", &test);
    printf("%d\n", test);
}
Run Code Online (Sandbox Code Playgroud)

例如,如果输入文件有整数1-10,则上面的代码将打印:

2 3 4 5 6 7 8 9 10

错过了1!

Day*_*rai 7

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


lus*_*oog 5

您应该将EOF条件视为实现细节.这里真正重要的是fscanf是否成功返回了一个值.

while(fscanf(ifp, "%d", &test) == 1) {
    printf("%d\n", test);
}
Run Code Online (Sandbox Code Playgroud)

另一方面,这感觉就像将逻辑放在循环中间那样有意义的时候.

while(1) {
    int ret = fscanf(ifp, "%d", &test);
    if (ret != 1)
        break;
    printf("%d\n", test);
}
Run Code Online (Sandbox Code Playgroud)

特别是对于调试,将事物拆分为可以检查的变量的单独语句可能会很好.