4

こんにちは、ユーザーが数字ではないものを入力した場合、数字を入力する代わりにプログラムをチェックインしたいと思います。

だから私はこの機能をやった

void ValidationController::cinError(int *variable){

    if(!isdigit(*variable)){
        cin.clear();
        cin.ignore(256, '\n');
        cout <<*variable<<endl;
        *variable=0;
        cout <<*variable<<endl;
    }
}

私はこのように関数を呼び出します:

int more;
cin >>more;
cinError(&more);

だから私の問題は、私が数字を与えるたびに、私がしなかったように振る舞うということです。それは内側に入り、変数をゼロに等しくします。

4

2 に答える 2

8

isdigit間違って使用しているという事実は別としてisdigitint. この状況では、>>コードではなく、数字を探すのはストリームのオペレーターです。

ユーザー入力を検証する場合は、データを に読み込み、そのコンポーネントで次のようにstring使用します。isdigit

string numString;
getline(cin, numString);
for (int i = 0 ; i != numString.length() ; i++) {
    if (!isdigit((unsigned char)numString[i])) {
        cerr << "You entered a non-digit in a number: " << numString[i] << endl;
    }
}
// Convert your validated string to `int`
于 2013-10-04T16:27:56.120 に答える
2

isdigit問題のコメントを確認してください

解決策に戻りますが、例外処理はどうですか? (ただし、dasblinkenlightのソリューションを好むでしょう)

  cin.exceptions(ios_base::failbit); 
  int more;
  try
  {
    cin >> more;
    if (!isspace(cin.get()))
       /* non-numeric, non-whitespace character found
         at end of input string */
      cout << "Error" << endl;
    else
      cout << "Correct" << endl;
  }
  catch(ios_base::failure& e)  
  {        
  /* non-numeric or non-whitespace character found                    
   at beginning */
    cout << "Error" << endl;
  }
于 2013-10-04T17:01:33.400 に答える