检查下一次读取是否设置EOF指示

时间:2017-01-15 16:56:12

标签: c stdio

在没有手动跟踪当前光标位置和文件大小的情况下,检查我是否已到达FILE*流的末尾的最佳方法是什么?该实现应该在fopen的读取和读/写模式下工作。

我想出了这个:

int iseof(FILE *fp)
{
    int ch = fgetc(fp);
    if(ch == EOF) return 1;
    ungetc(ch, fp);
    return 0;
}

这可以解决问题,但当然它有读取字符的开销,并可能将其推回到流中。这就是为什么我想知道是否有更好的解决方案。只需使用feof()即可使用,因为只有在文件末尾或之后读取时才会返回true

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

最好在while循环中手动执行此检查,而不是尝试编写一个函数来包装它:

ch = fgetc(fp);
while (ch != EOF) {]
  // do something with ch
  ch = fgetc(fp);
}