1
int option;
int invalidOption2 = 0;

while(invalidOption2 == 0){
      try{
        cin>>option;
        if(!cin){
            error("invalid input");
        }
        if(option<1 || option>2){
            error("invalid input");
        }
        if(option==1) {
            invalidOption2 = 1;
            cout<<"option 1 was selected"<<endl;
        }
        else if(option==2) {
            invalidOption2 = 1;
                        cout<<"option 2 was selected"<<endl;
        }       
      }
      catch(runtime_error& e) { 
              cerr <<"Please enter a valid option" << endl;
      }
}

上記のコードを使用すると、最初の値を入力すると、オプション メッセージまたはエラー メッセージを表示する代わりに、次の行に移動して別の入力を待ちます。ただし、2 番目の値を入力すると、通常どおりに機能します。

たとえば、私が入力した場合

a (ここでは何も起こらないので、別の値を入力する必要があります)

1

「オプション 1 を選択しました」

が表示され、元の無効な入力に対するエラー メッセージは表示されません。

代わりに以下の結果を取得する方法を知りたいです。

a

「有効なオプションを選択してください」

1

「オプション 1 を選択しました」

任意の助けをいただければ幸いです

4

4 に答える 4

0

これはより良いコードに見えると思います(少なくとも目には):

int option;
int invalidOption2 = 0;

while(invalidOption2 == 0)
{
      try
      {
        cin>>option;
        switch(option)
        {       

        case 1 : 
            invalidOption2 = 1;
            cout<<"option 1 was selected"<<endl;   
            break;     
        case 2 : 
            invalidOption2 = 1;
            cout<<"option 2 was selected"<<endl;
            break;
        default : 
            error("invalid input");       

         }
      catch(runtime_error& e)
      { 
              cerr <<"Please enter a valid option" << endl;
      }
}

intそれでも問題があると思われる場合は、次の使用をお勧めcharします。cin

option = getchar(); 
于 2013-05-20T09:38:53.057 に答える
0

ここで cin を 2 回呼び出すことが問題になる可能性があると思いますが、確かではありません。このようなものもうまくいくはずです:

char option[80]; // 80 is the standard terminal line length
bool loop = 1;
while(loop)
{
    cin >> option;
    if (option[1]=='\n') // testing if string is length 1
    {
        cout << "Please select a valid input\n";
        continue; // if not, display error and try again
    };
    switch(option[0])
    {
        case '1': loop=0; break; // add whatever before break
        case '2': loop=0; break;
        default: cout << "please select a valid input\n"; break;
    };
};
cout << "Option "<< option << "was selected\n";

私はこれをコンパイルしませんでしたが、大丈夫なはずです。

于 2013-05-20T11:00:30.080 に答える
0

オプションは整数型である可能性が高いため、cin は 'a' を読み取ることができないため、無視されます。

これはあなたの場合ですか?

次のように変更できます。

char option;
while(invalidOption2 == 0){
    try{
        cin>>option;
        if(!cin){
            error("invalid input");
        }
        if(option<'1' || option>'2'){
            error("invalid input");
        }
        if(option=='1') {
            invalidOption2 = 1;
            cout<<"option 1 was selected"<<endl;
        }
        else if(option=='2') {
            invalidOption2 = 1;
            cout<<"option 2 was selected"<<endl;
        }       
    }
    catch(runtime_error& e) { 
        cerr <<"Please enter a valid option" << endl;
    }
}

これは、期待どおりに機能するはずです。

ただし、このような構造:

char option;
while (cin >> option) {
    if ((option == '1') || (option == '2')) {
        break;
    }
    else {
        cout << "Please enter 1 or 2." << endl;
    }
}
cout << "option " << option " << " was selected" << endl;

そのほうがいいかもしれません^_^

于 2013-05-20T07:34:25.053 に答える