非常に単純な入力検証アルゴリズムを作成しました。なかなか良かったと思いましたが、テストしてみるとわからないことがありました。これが最初のコードです。
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <string>
using namespace std;
int main()
{
cout << "Simple Menu"
<< "\n\t\t1. Input"
<< "\n\t\t2. Exit" << endl;
string input = "";
int myNum = 0;
char myChar = {0};
do
{
cout << "Please enter a valid menu option: ";
getline(cin,input);
if (!(stringstream(input) >> myNum))
{
cout << "Please enter a valid menu option: ";
getline(cin,input);
}
}while(myNum < 1 || myNum > 5 || input.length() != 1);
cout << "\nThe menu option you entered is: " << myNum << endl << endl;
return 0;
}
結局、.1を選択肢として入れると、有効なオプションを入力するように求められます。これは良いことです。ただし、.1を入力した直後に2(有効なオプション)を入力すると、不正な値を入力したかのように反応します。このようなイベントのコンソールウィンドウは次のとおりです。
Simple Menu
1. Input
2. Exit
Please enter a valid menu option: .1
Please enter a valid menu option: 2
Please enter a valid menu option: 2
The menu option you entered is: 2
Press any key to continue . . .
これがなぜなのか、何か考えはありますか?