为什么我在while while语句中得到无限循环?

时间:2015-11-02 06:32:24

标签: c++ algorithm data-structures

在我看来,如果输入不是整数,循环将启动,并等待用户的下一个输入。但是,以下代码循环使用“value for a”,并且用户无法输入其他输入。

#include<iostream>

using namespace std;

int main()
{
        int a;
        do{
                cout <<"Value for a: ";
                cin >>a;
        }
        while(cin.fail());
   return 0;
}

1 个答案:

答案 0 :(得分:5)

当用户输入错误输入时,cin的错误状态设置。在清除错误状态之前,您无法从cin读取任何内容。

你必须:

  1. 调用cin.clear()清除错误状态,然后
  2. 致电cin.ingore()以忽略其余部分。
  3. 你需要的是:

    do {
       cout <<"Value for a: ";
       if ( cin >> a )
       {
          // Input was successful.
          break;
       }
    
       // Clear the error state of the input stream.
       cin.clear();
    
       // Ignore the rest of the line.
       cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    } while (true);
    

    并添加

    #include <limits>
    

    能够使用std::numeric_limits