C++ 还有更多的C++;如何获取EOF代码?

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结

在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的安全检查是在C++中使用FEFF(),在C++中使用EFF(.EFF)方法。

> 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()
函数的错误
则不同;它只有在您尝试读取流的末尾之后才变为真,如果出现错误则不会变为真。它通常不那么冗长,因为在您使用它的上下文中,已经存在一些
错误