Mah*_*esh 8 c++ iostream visual-c++
我理解cin.eof()测试流格式.在输入时,输入错误时不会到达字符结尾.我在MSV C++ 2010上对此进行了测试,并没有理解奇怪的结果.无论我给出什么输入,我都会收到程序中存在的格式错误消息.
#include <iostream>
using namespace std;
int main()
{
int i;
cin>> i;
if(!cin.eof())
{
cout<< "\n Format Error \n";
}
else
{
cout<< "\n Correct Input \n";
}
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果我预计:
i =的值
有人可以解释我哪里错了.谢谢.
sbi*_*sbi 19
std::cin.eof()测试文件结束(因此eof),而不是错误.对于错误检查使用!std::cin.good(),内置转换运算符(if(std::cin))或布尔否定运算符(if(!std::cin)).
Shi*_*dra 13
使用以下方式直接测试流的状态:
while (cin >> i)
{
...
}
Run Code Online (Sandbox Code Playgroud)
要使输入流进入 EOF 状态,您必须实际尝试读取流末尾之后的内容。即,到达流中的流结束位置是不够的,有必要实际尝试读取超出末尾的字符。此尝试将导致 EOF 状态被激活,这反过来又会使cin.eof()返回 true。
然而,在你的情况下,你不仅没有这样做,你(很可能)甚至没有到达流的末尾。如果您10从键盘输入,您可能是通过按[Enter]键完成输入。这导致换行符被添加到输入流中。因此,在这种情况下,您实际上用运算>>符解析的实际上是一个10\n序列。由于您int从流中请求了一个值,因此它只从流中读取数字字符,即它读取1和0,但它停在\n。那\n仍然在流中。你从来没有读过它。因此,显然,您的代码永远不会到达流中的文件末尾位置。你必须有理由预料到cin.eof()会出现true这种情况。