1

私はこの簡単なコードを書きました:

 #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()が返されます。truedoublecin

私は何が欠けていますか?

4

3 に答える 3

1

std :: istream :: operator >>()は、現在のタイプ(たとえば、数字と.for)に適合する限り、文字を読み取りますdouble。次の文字は、別の抽出演算子の入力バッファーに残されます。読み取られた文字が現在のタイプを満たすことができる場合、エラーは通知されません。

于 2012-11-25T00:07:33.720 に答える
1

を読み取るので'234.'、それは有効な数値です。入力した残りのものは'abcd'、次の読み取りを待っています。

于 2012-11-25T00:02:34.807 に答える
1

要求された入力、つまりdoublecoukdが満たされている、つまり読み取り操作が成功した。ストリームが継続していることを確認したい場合は、これを読む必要があります。または、ストリーム内の次の文字が特定の種類であるかどうかを確認できます。

于 2012-11-25T00:05:17.560 に答える