0

プログラムが次の値を読み取るように、誰かが cin に数値を指定しない場合に発生する例外をキャッチしたいと思います。

#include <iostream>

using namespace std;

int main()
{
    int x = 0;
    while(true){
        cin >> x;
        cout << "x = " << x << endl;
    }
    return 0;
}
4

4 に答える 4

4

スローされる例外はまったくありません。代わりに、cinある種の「不正な入力」フラグを設定します。あなたが欲しいのはこれです:

while ((std::cout << "Enter input: ") && !(std::cin >> x)) {
    std::cin.clear(); //clear the flag
    std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n'); //discard the bad input
    std::cout << "Invalid input; please re-enter.\n";
}

この一連の質問は、それを非常によく説明しています。

リンク:
clear()
ignore()

于 2012-06-13T19:22:10.543 に答える
4

本当に例外処理を使用したい場合は、次のようにすることができます。

cin.exceptions(ios_base::failbit); // throw on rejected input
try {
// some code
int choice;
cin >> choice;
// some more code
} catch(const ios_base::failure& e) {
    cout << "What was that?\n";
    break;
} 

参考:http ://www.cplusplus.com/forum/beginner/71540/

于 2012-06-13T19:23:06.457 に答える
2

次のようなものを追加します。

if(cin.fail())
{   
  cin.clear();
  cin.ignore(std::numeric_limits<std::streamsize>::max(),' '); 
  cout << "Please enter valid input";
} 
于 2012-06-13T19:26:16.000 に答える
1
int main()
{
    int x = 0;
    cin.exceptions(ios::failbit);
    while(true){
        try
        {
            cin>>x;
        }
        catch(ios_base::failure& e)
        {
            //..
        }
        cout<<"x = "<<x<<endl;
    }
    return 0;
}

これはうまくいくはずです。

于 2012-06-13T19:23:34.450 に答える