我写了这个简单的代码:
#include <iostream>
using namespace std;
int main()
{
double s;
cin >> s;
if (cin.fail())
cout<<"Error";
return 0;
}
当我输入12.03
时,cin.fail()
会返回false
,这很好。
当我输入sd234
时,cin.fail()
会返回true
,这也很好。
但是,如果我输入234.abcd
,或者输入后跟字符的任何数字,cin.fail()
会返回true
,但我没有输入数字double
变量通过cin
。
我错过了什么?
答案 0 :(得分:1)
因为它读取'234.'
,这是一个有效的数字。
您输入的其他内容'abcd'
正在等待下一次阅读。
答案 1 :(得分:1)
要求输入,即double
coukd,即读取操作成功。如果您想检查流是否继续您希望您需要阅读此内容。或者,您可以检查流中的下一个字符是否属于某种类型。
答案 2 :(得分:1)
double
的数字和。),std::istream::operator>>()就会读取字符。以下字符留在输入缓冲区中,用于另一个提取操作符。如果读取的字符可以满足当前类型,则不会发出错误信号。