2017-02-27 24 views
0

私は本当に任意の記号やアルファベット入力を検証するにはどうすればいいですか?

int main() 
    { 
     int age= 0; 
     std::cin >> age; 
     if (std::cin.fail()) 
     { 
     std::cout << "I failed, try again ..." << std::endl; 
     std::cin.clear(); // reset the failed state 
    } 
+0

'getline' +' regex' – knivil

+0

@knivil整数結果を格納しようとすると、regexは過度の過労です。 'std :: stoi'の呼び出しは、適切なエラーチェックで十分です。 – chris

+0

@knivil 'regex'を使うのはおそらく過剰です。 –

答えて

0

ない年齢が数であるか、それはE1を受け付けませんしながら、この例では、それは数として1Eを受け入れるかどうかをチェックする習慣、私は唯一の数字を受け入れるように習慣
cinと抽出演算子は、ユーザーの入力を解析するのには適していません。自動的に書式設定されたレコードは入力できますが、自由形式のエラーがある入力は許可されません。

行ベースの入力を使用している場合は、関数strtol()を呼び出して、数字を見つけることができます。 strtol()は負の符号と数値を扱い、整数に収まらないものもあります。基本的に安全な整数パーサーです。また、エラーが発生した場合、簡単に行全体を破棄して、通常は望ましい動作である再入力をユーザーに求めることができます。

関連する問題