我刚刚写了一个非常简单的输入验证算法。我认为它很好,但是当我测试它时,我看到了一些我不明白的东西。这里首先是代码。
#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 . . .
知道这是为什么吗?