1

我写了这个简单的代码:

 #include <iostream>
 using namespace std;
 int main()
 {
   double s;
   cin >> s;
   if (cin.fail())
     cout<<"Error";
   return 0;
 }

当我进入12.03时,cin.fail()返回false,这很好。

当我进入时sd234cin.fail()返回true,这也很好。

但是,例如,如果我输入234.abcd. 或任何后跟字符的数字,cin.fail()尽管true我没有double通过cin.

我错过了什么?

4

3 回答 3

1

std::istream::operator>>()读取符合当前类型的字符(例如,digits 和 . for double)。以下字符留在输入缓冲区中以供另一个提取运算符使用。如果读取的字符可以满足当前类型,则不会发出错误信号。

于 2012-11-25T00:07:33.720 回答
1

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

于 2012-11-25T00:05:17.560 回答
1

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

于 2012-11-25T00:02:34.807 回答