优雅的方式来确定EOF?

Qua*_*ker 2 c file eof

我正在读取一个文本文件,用while(!feof)循环迭代,但每当我使用这个条件时,循环会迭代一个额外的时间.

我用这个'补丁'代码解决了这个问题

while (stop == FALSE)
{
 ...

        terminator = fgetc(input);
        if (terminator == EOF)
            stop = TRUE;
        else
            fseek(input, -1, SEEK_CUR);
}
Run Code Online (Sandbox Code Playgroud)

但它看起来和感觉非常糟糕.

Bla*_*ear 7

您可以利用以下事实:将赋值分配为要分配的值,在本例中为要读取的字符:

while((terminator = fgetc(input))!= EOF) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)


Bri*_*ain 6

这是一个惯用的例子(来源):

fp = fopen("datafile.txt", "r"); // error check this!

// this while-statement assigns into c, and then checks against EOF:

while((c = fgetc(fp)) != EOF) {
    /* ... */
}

fclose(fp);
Run Code Online (Sandbox Code Playgroud)