为什么cin.fail()在输入后跟字符的数字时不返回false?

时间:2012-11-24 23:58:45

标签: c++ cin

我写了这个简单的代码:

 #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

我错过了什么?

3 个答案:

答案 0 :(得分:1)

因为它读取'234.',这是一个有效的数字。 您输入的其他内容'abcd'正在等待下一次阅读。

答案 1 :(得分:1)

要求输入,即double coukd,即读取操作成功。如果您想检查流是否继续您希望您需要阅读此内容。或者,您可以检查流中的下一个字符是否属于某种类型。

答案 2 :(得分:1)

只要符合当前类型(例如double的数字和。),

std::istream::operator>>()就会读取字符。以下字符留在输入缓冲区中,用于另一个提取操作符。如果读取的字符可以满足当前类型,则不会发出错误信号。