1

我无法仅对数字输入进行输入验证。下面是我每次输入字母时都会循环的代码,但输入错误的数字不会。它循环“无效输入,请重试”。唯一的选择是关闭它。我怎样才能解决这个问题?

        while (!(cin >> userOption) || userOption < 1 || userOption > 12) {
            cout << "Invalid Input, please try again." << endl;
            cin >> userOption;
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cin.clear();
4

3 回答 3

3

您不希望cin >> userOption同时在while条件和循环内,因为这会在每个循环中产生两个输入。

条件中的一个while应该足够了。

于 2013-10-15T14:19:21.440 回答
0

如果结果正常,试试这个来跳出循环:

    while (true) {
       if (!(cin >> userOption) || (userOption_tmp < 1) || (userOption_tmp > 12)) {
        cout << "Invalid Input, please try again." << endl;
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cin.clear();
       }
       else {
             break;
       }

        //this is looping when letter inputed
    }
于 2013-10-15T14:22:06.543 回答
0

首先初始化userOption

unsigned int userOption = 0;

然后像这样走:

while ( userOption < 1 || userOption > 12 /* or even true, like Atle suggested */) 
{
     cin >> userOption;
     if( !cin || userOption < 1 || userOption > 12 )
     {
         cout << "Invalid Input, please try again." << endl;
         std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
         std::cin.clear();
         continue;
      }
      else
         break;  //this is looping when letter inputed
 }
于 2013-10-15T14:29:57.930 回答