私はこのコードを持っています:
double input2;
cout<<"please enter one number:"<<endl;
cin>>input2;
ユーザーが「3」、「4」、「4.241」などの数字のみを入力したかどうかを判断するにはどうすればよいですか。ユーザーが「n」、「3.q」などの文字を入力すると、プログラムがクラッシュすることがあります。
私はこのコードを持っています:
double input2;
cout<<"please enter one number:"<<endl;
cin>>input2;
ユーザーが「3」、「4」、「4.241」などの数字のみを入力したかどうかを判断するにはどうすればよいですか。ユーザーが「n」、「3.q」などの文字を入力すると、プログラムがクラッシュすることがあります。
stringstream を使用して、文字列を安全に数値に変換できます。
string input;
int mynumber;
cout << "Please enter a valid number: ";
getline(cin, input);
// This code converts from string to number safely.
stringstream myStream(input);
if (myStream >> myNumber)
cout <<"number is valid"<<endl;
else
cout<<"invalid number";
cin::<<
操作がうまくいかなかった場合、オペレーターは戻りますNULL
。原因は多数ありますが、解釈が失敗した場合failbit
は設定されます。次の方法で確認できますrdstate()
。
int main()
{
double input2;
cout<<"please enter one number:" << endl;
cin >> input2;
if (cin.rdstate() & ifstream::failbit)
cout << "input badly formatted" << endl;
return 0;
}
そのせいで潰れません。無効な入力のために cin >> input2 操作が失敗した場合、cin は無効な状態になりますが、クラッシュしません。
入力が成功したことを確認する必要があります
if (std::cin >> input2) {
...
}
.. 誤った入力に対処しなかった場合、たとえば:
std::cin.clear();
std::cin.ignore();