在C中,EOF
是stdio.h
中定义的宏。我想知道是否有一个与之相当的C ++(const int
或者......)
我想要它做什么?例如,我可能想要实现SeekEof()
:
// Is there any non-space character remaining?
bool SeekEof(std::istream &in) {
int c(0);
while ((c = in.peek()) != EOF &&
(c == ' ' || c == '\t' ||
c == '\r' || c == '\n')) in.get();
return c == EOF ;
}
答案 0 :(得分:4)
std::char_traits<char>::eof()
std::char_traits<char16_t>::eof()
std::char_traits<char32_t>::eof()
std::char_traits<wchar_t>::eof()
答案 1 :(得分:2)
您也可以在c ++应用程序中使用stdio.h
。但要小心使用它。它的愚蠢(-1)宏和-1到字节是255(0xff)。如果检查输入字符到EOF,则可以以伪结尾的结果结束。 eof
的安全检查是在c ++中的c / c ++和.eof()方法中使用feof()。
答案 2 :(得分:1)
使用C的<stdio.h>
函数从文件或其他流中读取时,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
的定义。
另一个重载版本会引用char
并返回istream&
结果,可以对其进行测试以判断它是否能够读取任何内容:
char c;
while (std::cin.get(c)) {
std::cout << c;
}
有eof()
函数(特别是std::ios::eof()
)告诉您是否设置了文件结束标志。还有其他几个状态函数:good()
,fail()
和bad()
。 See here for more information.
(注意:cplusplus.com被认为是一个很好的资源吗?如果没有,请告诉我,我会更改链接。)
在任何情况下,状态函数(feof()
和ferror()
用于CI / O,eof()
,fail()
,bad()
,good()
对于C ++ I / O)不应该用作循环条件;相反,循环应该由您在尝试输入时获得的结果控制,并且其他函数可以在循环终止后使用来确定它终止的原因。
答案 3 :(得分:0)
std :: fstream fileHandle.eof() http://www.cplusplus.com/reference/iostream/ios/eof/