8
#include<iostream>;

int main()
{
    int a = 1;
    int b = 2;
    std::cin >> a >> b;
    std::cout << a << "+" << b << "=" << a+b << std::endl;
    return 0;
}

入力3 4として入力すると、出力は3+4=7、まあ、奇妙です。しかし、入力するa bと、出力は0+0=0(なぜ0と0なのですか?); 最も紛らわしいのはa 40+0=0('0+4=4' ではないのはなぜか?????) です。それから私は別のプログラムを書きます。

#include<iostream>;

int main()
{
    int a = 1;
    int b = 2;
    std::cin >> a;
    std::cin.clear();
    std::cin >> b;
    std::cout << a << "+" << b << "=" << a+b << std::endl;
    return 0;
}

私が入ったときa 4、なぜそれはまだ0+0=0ですか0+4=4

心温まる皆様、ありがとうございました!!

私はprog3を書いて、書いていないときに何が起こるかをテストしますint a=1;int b=2

2

#include <iostream>
using namespace std;
int main()
{  
    int a,b;
    cin >> a  ;
    cin >> b;
    cout<< a << "+"<< b <<"="<< a+b << endl;
    return 0;
}

a b再び、それは出力します(0+-1218170892=-1218170892なぜではないのです0+0=0か??)

4

3 に答える 3

1

C++11 に従って、エラーの場合、値はゼロに設定されます。抽出が失敗した場合、値にゼロが書き込まれ、failbit が設定されます。

「a 4」の例では、バッファがフラッシュ/クリアされていないため、両方の値が 0 であり、2 番目の cin read がまだエラーを読み取っていて、値 0 を受け取ります。

于 2012-09-13T15:08:17.447 に答える
1

すべてistreamsの と同様に、std::cinエラー ビットがあります。これらのビットは、エラーが発生したときに設定されます。たとえばgood()bad()eof()、 などの関数を使用してエラー ビットの値を見つけることができます。不正な入力 (fail()が返されるtrue) を読み取った場合は、 を使用clear()してフラグをクリアします。ignore(1);また、問題のある文字を削除するためにも必要になるでしょう。

詳細については、State functionsセクションを参照してください。http://en.cppreference.com/w/cpp/io/basic_ios

于 2012-09-13T14:42:34.417 に答える
0

std::cin は istream インスタンスであるため、無効なものを読み取ってもエラー状態を維持します。

それを「治す」ためには、両方ともそのフラグをクリアする必要があります

std::cin.clear();

そしてそのバッファをフラッシュします。

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

さらに驚くべきことは、無効な文字を入力しても 1 + 2 = 3 が返されないことです。これは、失敗した cin ストリームが更新しようとしているものに副作用がないと予想されるためです。

于 2012-09-13T14:42:50.420 に答える