文字列入力検証の問題(C ++)

ナムトラン

ユーザー入力を検証しようとしたときに問題が発生しました。これが私のコードです:

#include <iostream>
#include <string>

using namespace std;

int main() 
{
  string choice;


  cout << "Please type something: ";
  cin >> choice;
  cin.ignore();

  while (choice != "1" && choice != "2" && choice != "3" && choice != "4" && choice != "5")
  {
    cout << "Incorrect choice! Please input a valid number: >_";
    cin >> choice;
    cin.ignore();
  } 

  return 0;
}

「wronginput」を入力すると、その入力がwhileループに入り、表示されました

間違った選択!有効な番号を入力してください:> _

どっちがいい。ただし、「間違った入力」を試みると、「奇妙な」バージョンが表示されます。

間違った選択!有効な番号を入力してください:> _間違った選択です!有効な番号を入力してください:> _

私の推測では、その間のスペースが原因だと思います。これを修正する方法はありますか?ありがとうございました。

フューリーッシュ

これstd::cin >> choice、次の空白にすべて読み取るフォーマットされた入力であるためです

「間違った入力」と入力するとすべてが読み取られますが、「間違った入力」と入力すると「間違った」部分のみが読み取られます。あなたのwhileループが実行し、起動しますstd::cin >> choice再びその身体の内側に、それは「入力」を読みます。

この動作により、プログラムはメッセージを2回続けて出力します。

それを修正する方法は?次の空白まで、単一のトークンを読み取る代わりに、行全体を読み取ることを検討してください


それを達成する方法は?単に使用する代わりに

std::cin >> choice;

std::getline関数を使用します:

std::getline(std::cin, choice);

whileループの外側と内側の両方

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事