而循环跳过Cin

时间:2014-03-02 00:29:13

标签: c++ c++11

while (guess<1234 or guess>9876)
  {
    cout << "Invalid" << endl;
    cin >> guess;
  }

输出垃圾邮件无效,&#39;没有时间进入新的猜测。我怎么能让它暂停?

2 个答案:

答案 0 :(得分:0)

您需要过滤数值(请参阅How can I get std::cin to skip invalid input characters? ):

#include <iostream>
#include <limits>

using namespace std;

int main() {
    int guess;
    while (guess<1234 or guess>9876) {
        cout << "Invalid" << guess << endl;
        cin >> guess;
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
}

答案 1 :(得分:0)

由于您之前尝试读取“错误”数据,cin似乎处于不良状态,例如尝试将“hello”读入int。如果它处于不良状态,你应该清除它:

while (guess<1234 or guess>9876)
{
    cout << "Invalid" << endl;
    if (!cin) {
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    cin >> guess;
}

您还需要为<limits>添加std::numeric_limits

相关问题