以下のプログラムは、「int」値の入力と出力を同時に示しています。ただし、文字を入力すると、前に入力した「int」値を表示する無限ループに入ります。文字が入力されないようにするにはどうすればよいですか?
#include<iostream>
using namespace std;
int main(){
int n;
while(n!=0){
cin>>n;
cout<<n<<endl;
}
return 0;
}
無限ループの理由:
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;
#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;
}
}
ユーザー定義関数を使用する場合は、ascii/ansi 値を使用して文字入力を制限できます。
48 -57 は 0 から 9 の値の範囲です