ユーザー入力を検証しようとしたときに問題が発生しました。これが私のコードです:
#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]
コメントを追加