2016-05-27 6 views
1

あります。このループから出る値は1と2だけです。 1.2または4.5では、暗黙的に整数に変換されます(1および4値)。私は文字列の値を入れて、ループ無限の作業と私はコンソールを閉じて、最初からデバッグする必要があります。入力値をdoubleとstringの値から保護する正しいループを書くにはどうすればいいですか?確認入力値は、私は、whileループ(以下)入力値をチェックすることを作る整数型

int triangle; 
do{ 
     cout << "Put the number (1 or 2): "; 
     cin >> triangle; 
    } while (triangle > 2 || triangle < 1 || !cin); 
+0

ループ条件は、 '' CIN &&(三角形<1つの||三角形> 2)であるべきです。 –

+0

[このスレッド](http://stackoverflow.com/questions/10178830/input-validation-for-numeric-input)で受け入れられた答えはあなたが探しているものです。浮動小数点数を読み取って小数部分をチェックするためにそれを微調整することができます。 – jrok

+0

[fmod](http://en.cppreference.com/w/cpp/numeric/math/modf)を参照してください。 – jrok

答えて

1

あなたはそれが他の1つの整数0

を読むのであれば、あなたが行うことができますfollorwingに

int triangle; 
cin >> triangle; 

if (cin.fail()) { 
    //Not an int. 
} 
+0

さて、 'cin'エラーを' if(!(cin >> triangle)){/ * Not * int * /} 'としてチェックすると、より良いものになります。 –

+0

また、入力エラーが検出された後にストリームをクリーンアップする方法を知っているといいでしょう。 –

+0

浮動小数点値を入力すると両方のテクニックが動作しません。 OPは浮動小数点値の入力について言及していたので。 – sameerkn

-2

のscanf( "%d個"、&三角形)の復帰1を実行して、それを確認することができますそれは好きです(それはまたEOFを扱います)

printf("Enter option (1 or 2)\n"); 
while(~scanf("%d", &n)) 
{ 
    if (n!=1 && n!=2) 
      break; 
    printf("Enter option (1 or 2)\n"); 
} 
+5

まさに現代のないCは...本当に – Smeeheey

+1

'〜scanf' –

1

1.初期化するのが良いですtriangle

たら、2. std::basic_istream::operator>>抽出が失敗し、failbitが設定されます。結果を確認してstd::basic_ios::clearに電話してエラー状態をクリアし、std::basic_istream::ignoreと入力して不正な入力をスキップする必要があります。

int triangle = 0; 

for (;;) { 
    cout << "Put the number (1 or 2): "; 
    if (cin >> triangle) { 
     if (triangle == 1 || triangle == 2) break; 
    } else { 
     cin.clear(); // reset stream state after failure 
     cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // skip bad input 
    } 
} 
+0

はい、この解決策は、二重の値と文字列値が、問題を入力して問題を解決している、まだ存在しています。私はexを置くときにexpecially。 '1.2'は暗黙的に '1'に変換され、それをループに送ります。 – kenzolek

+0

@kenzolek 'int'の場合、入力プロセス(抽出)はchar'''で終了し、' .'だけ読み込みます。私は型を 'string'に変更して、それが' int'か 'double'か何か他のものであることを確認する必要があると思います。 – songyuanyao

2
int check() 
{ 
    string s; 
    cin >> s; 
    if(s.length() == 1) 
    { 
     if((s[0] == '1') || (s[0] == '2')) 
     { 
      return s[0] - '0'; 
     } 
    } 
    return 0; 
} 
int main() 
{ 
    int triangle; 
    do 
    { 
     cout << "Put the number (1 or 2): "; 
    } 
    while (triangle = check()); 
    return 0; 
} 
+0

素敵なアイデア...... – songyuanyao

関連する問題