<stdio.h>
当使用 C函数从文件或其他流中读取时EOF
,某些函数返回一个特殊值,用于标记无法读取更多数据,因为您已到达文件末尾或出现错误。有feof()
和功能,但只有在您检测到文件结束或错误情况后才ferror()
应使用这些功能,以区分另一个。
例如,经典的 C 输入循环是:
int c; /* Note int, *not* char */
while ((c = getchar()) != EOF) {
/* do something with c */
}
/* optional: */
if (ferror(stdin)) {
/* an error occurred, not just end-of-file */
}
C++ 有几个不同的重载std::istream::get()
函数。其中一个不带参数并且行为与 C 非常相似getchar()
:它返回一个int
值,EOF
如果没有更多数据可用:
int c;
while ((c = std::cin.get()) != EOF) {
// do something with c
}
你必须#include <cstdio>
得到 的定义EOF
。
另一个重载版本引用 achar
并返回一个istream&
可以测试的结果,以判断它是否能够读取任何内容:
char c;
while (std::cin.get(c)) {
std::cout << c;
}
有一个eof()
函数(特别是std::ios::eof()
)告诉您是否设置了文件结束标志。还有其他几个状态函数good()
:fail()
和bad()
。浏览此处获取更多信息。
(注意:cplusplus.com 是一个很好的资源吗?如果不是,请告诉我,我会更改链接。)
在任何情况下feof()
,状态函数(对于ferror()
CI/O,,,,,对于C++ I/O)不应该用作循环条件;相反,循环应该由您尝试输入时获得的结果控制,并且可以在循环终止后使用其他函数来确定它终止的原因。eof()
fail()
bad()
good()