0

私はこのコードを持っています:

double input2;
cout<<"please enter one number:"<<endl;
cin>>input2;

ユーザーが「3」、「4」、「4.241」などの数字のみを入力したかどうかを判断するにはどうすればよいですか。ユーザーが「n」、「3.q」などの文字を入力すると、プログラムがクラッシュすることがあります。

4

4 に答える 4

2

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";
于 2012-11-24T23:34:54.390 に答える
1

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;
}
于 2012-11-24T23:36:48.517 に答える
0

そのせいで潰れません。無効な入力のために cin >> input2 操作が失敗した場合、cin は無効な状態になりますが、クラッシュしません。

于 2012-11-24T23:32:39.457 に答える
0

入力が成功したことを確認する必要があります

if (std::cin >> input2) {
    ...
}

.. 誤った入力に対処しなかった場合、たとえば:

std::cin.clear();
std::cin.ignore();
于 2012-11-24T23:34:48.693 に答える