C++ 还有更多的C++;如何获取EOF代码?
在C语言中,C++ 还有更多的C++;如何获取EOF代码?,c++,C++,在C语言中,EOF是在stdio.h中定义的宏。我想知道C++是否等于它(A代码> const int 或什么)?< /p> 我想要它做什么?例如,我可能想实现一个SeekEof(): std::fstream fileHandle.eof() std::fstream fileHandle.eof() 也可以在C++应用程序中使用 STDIO .H./Cuth>。但是要小心使用它。它的愚蠢的(-1)宏和-1到字节是255(0xff)。若您将输入字符检查为EOF,则可以以文件结尾为false结
EOF
是在stdio.h
中定义的宏。我想知道C++是否等于它(A代码> const int <代码>或什么)?< /p>
我想要它做什么?例如,我可能想实现一个SeekEof()
:
std::fstream fileHandle.eof()
std::fstream fileHandle.eof()
也可以在C++应用程序中使用<代码> STDIO .H./Cuth>。但是要小心使用它。它的愚蠢的(-1)宏和-1到字节是255(0xff)。若您将输入字符检查为EOF,则可以以文件结尾为false结束。
> P>您可以在C++应用程序中使用<代码> STDIO。但是要小心使用它。它的愚蠢的(-1)宏和-1到字节是255(0xff)。若您将输入字符检查为EOF,则可以以文件结尾为false结束。“代码+ EOF <代码>的安全检查是用C++中的FEFF()和C++中的EFF(.EF)方法。
std::char_traits<char>::eof()
std::char_traits<char16_t>::eof()
std::char_traits<char32_t>::eof()
std::char_traits<wchar_t>::eof()
std::char_traits::eof()
std::char_traits::eof()
std::char_traits::eof()
std::char\u traits::eof()
std::char_traits::eof()
std::char_traits::eof()
std::char_traits::eof()
当使用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++有几个不同的重载函数。其中一个不带参数,其行为与C的getchar()
非常相似:如果没有更多可用数据,它将返回一个int
值,该值将为EOF
:
int c;
while ((c = std::cin.get()) != EOF) {
// do something with c
}
您必须使用#include
才能获得EOF
的定义
另一个重载版本引用一个char
,并返回一个istream&
结果,可以测试该结果以判断它是否能够读取任何内容:
char c;
while (std::cin.get(c)) {
std::cout << c;
}
charc;
while(std::cin.get(c)){
std::cout当使用C的
函数从文件或其他流中读取数据时,EOF
是某些函数返回的一个特殊值,用于标记无法读取更多数据,这可能是因为您已到达文件末尾或出现错误。有feof()
和feror()
函数,但只有在检测到并结束文件或错误情况后,才能使用这些函数,以区分其中一种
例如,经典的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
才能获得EOF
的定义
另一个重载版本引用一个char
,并返回一个istream&
结果,可以测试该结果以判断它是否能够读取任何内容:
char c;
while (std::cin.get(c)) {
std::cout << c;
}
charc;
while(std::cin.get(c)){
std::cout您是如何读取它的?通常有一种方法可以检查EOF标志。请具体说明。我想您想知道EOF的数据类型,因此,我认为它是布尔值:@facunvd:EOF
类型为int
,通常值为-1
。您的链接指的是EOF
,特别是std::ios::eo>f
,这是不同的;它类似于C的feof()
函数。感谢您的澄清,我不知道它。您如何阅读它?通常有一种方法可以检查EOF标志。请具体说明。我想您想知道EOF的数据类型,因此,我认为它是布尔值:@facunId:EOF
类型为int
,通常具有值-1
。您的链接参考s到eof
,特别是std::ios::eof
,这是不同的;它类似于C的feof()
函数。感谢您的澄清,我不知道它。+1.永远不要阅读char
并将其与EOF
进行比较,始终阅读int
并在以后转换为char
。它并不愚蠢,但可以愚蠢地使用。例如,getchar()
返回一个int
结果,该结果是从stdin读取的字节,被解释为无符号字符
并转换为int
,或者是负值EOF
。误用getchar()
将其结果分配给char
将导致问题,但这是调用者的错误,而不是getchar()
函数的错误
是不同的;它只有在您尝试读取流的末尾之后才变为真,如果出现错误,它不会变为真。+1.永远不要读取字符
并与EOF
进行比较,始终读取int
并在以后转换为字符
。这并不愚蠢,但可以愚蠢地使用它。例如,ode>getchar()
返回一个int
结果,该结果是从stdin读取的字节,被解释为无符号字符,并转换为int
或负值EOF
。误用getchar()
将其结果分配给char
将导致问题,但这是调用者的错误,而不是getchar()
函数的错误
则不同;它只有在您尝试读取流的末尾之后才变为真,如果出现错误则不会变为真。它通常不那么冗长,因为在您使用它的上下文中,已经存在一些错误