有没有更多的C++方法可以获得EOF代码
Is there a more C++ way to get the EOF code?
在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 ;
}
std::char_traits<char>::eof()
std::char_traits<char16_t>::eof()
std::char_traits<char32_t>::eof()
std::char_traits<wchar_t>::eof()
您也可以在c++应用程序中使用stdio.h
。但要小心使用它。它愚蠢的(-1)宏和-1到字节是255(0xff)。若您检查EOF的输入字符,您可能会以文件的错误结尾结束。eof
的安全检查是在c/c++中使用feof()和在c++中使用.eof()方法。
当使用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++有几个不同的重载CCD_ 11函数。其中一个不带参数,其行为与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()
。请参阅此处了解更多信息。
(注意:cplusplus.com被认为是一个好资源吗?如果不是,请告诉我,我会更改链接。)
在任何情况下,状态函数(feof()
和ferror()
用于C I/O,eof()
、fail()
、bad()
、good()
用于C++I/O)都不应用作循环条件;相反,循环应该由您尝试输入时得到的结果来控制,其他函数可以在循环终止后使用来确定它终止的原因。
std::fstream fileHandle.eof()http://www.cplusplus.com/reference/iostream/ios/eof/
- 如何确定我已使用非编码文件到达 EOF?
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 我的代码在捕获块中处理了正确的 eof 后到达 eof 时会引发 basic_ios::clear ?
- 如何将EOF(文件结尾)放入代码::块中?
- 有没有更多的C++方法可以获得EOF代码
- 为什么在这一行代码中同时使用 EOF 和 '