10

以下のプログラムは、「int」値の入力と出力を同時に示しています。ただし、文字を入力すると、前に入力した「int」値を表示する無限ループに入ります。文字が入力されないようにするにはどうすればよいですか?

#include<iostream>
using namespace std;

int main(){
int n;

while(n!=0){
            cin>>n;
            cout<<n<<endl;
           }
return 0;
}
4

4 に答える 4

14

無限ループの理由:

cinは失敗状態になり、エラーフラグとバッファがリセットされるまで、それ以降の呼び出しを無視します。

cin.clear();
cin.ignore(100, '\n'); //100 --> asks cin to discard 100 characters from the input stream.

入力が数値かどうかを確認します。

あなたのコードでは、非int型でさえとにかくintにキャストされます。char配列に入力を取り、isdigit()各桁で関数を呼び出さない限り、入力が数値であるかどうかを確認する方法はありません。

関数isdigit()を使用して、数字とアルファベットを区別できます。この関数は<cctype>ヘッダーにあります。

is_int()関数は次のようになります。

for(int i=0; char[i]!='\0';i++){
    if(!isdigit(str[i]))
    return false;
}
return true;
于 2012-07-17T13:30:39.177 に答える
2
#include <iostream>
#include <climits> // for INT_MAX limits
using namespace std;
int main()
{
    int num;
    cout << "Enter a number.\n";
    cin >> num;
    // input validation
    while (cin.fail())
    {
        cin.clear(); // clear input buffer to restore cin to a usable state
        cin.ignore(INT_MAX, '\n'); // ignore last input
        cout << "You can only enter numbers.\n";
        cout << "Enter a number.\n";
        cin >> num;
    }
}
于 2016-10-23T20:02:10.683 に答える
1

ユーザー定義関数を使用する場合は、ascii/ansi 値を使用して文字入力を制限できます。

48 -57 は 0 から 9 の値の範囲です

于 2012-07-17T13:35:29.517 に答える