当用户输入一个字母时,卡在循环中

时间:2013-10-15 14:14:16

标签: c++

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

        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();

3 个答案:

答案 0 :(得分:3)

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

while条件下的那个应该足够了。

答案 1 :(得分: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
    }

答案 2 :(得分: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
 }