C++11 cin.fail()运行迭代是否太晚? 我做了一个比较简单的作业,要求我们输入整数,如果它碰到的不是整数,用C++编写,则失败。我对这门语言很有经验,我知道它有检查ios::failbit中读取错误的功能。因此,我在这里使用cin.fail()检查错误,但是它运行一个循环太晚了——也就是说,它首先运行其余的代码,直到下次检查缓冲区时才意识到发生了错误。显而易见的解决方案是只检查两次,但这只会导致无限循环(即使我刷新或清除cin)。有什么方法可以更立即地检查吗

C++11 cin.fail()运行迭代是否太晚? 我做了一个比较简单的作业,要求我们输入整数,如果它碰到的不是整数,用C++编写,则失败。我对这门语言很有经验,我知道它有检查ios::failbit中读取错误的功能。因此,我在这里使用cin.fail()检查错误,但是它运行一个循环太晚了——也就是说,它首先运行其余的代码,直到下次检查缓冲区时才意识到发生了错误。显而易见的解决方案是只检查两次,但这只会导致无限循环(即使我刷新或清除cin)。有什么方法可以更立即地检查吗,c++11,input,error-handling,C++11,Input,Error Handling,这是我的密码: int min = 101; //One higher than the max. int pile = 0; int count = 0; int temp = 0; int fail; std::cout << "Input a series of integers between 0 and 100. When you wish to" " exit, enter -1.\n&

这是我的密码:

    int min = 101; //One higher than the max.
    int pile = 0;
    int count = 0;
    int temp = 0;
    int fail;
    std::cout << "Input a series of integers between 0 and 100. When you wish to"
    " exit, enter -1.\n";
    while (true){
      std::cin >> temp;
      if (std::cin.fail()){
        std::cout << "FAILURE: Bad input. It probably wasn't an integer.\n";
        std::cout << "Reading will stop.\n";
        break;
      }
      std::cout << "\nTemp is " << temp << "\n";
      if (temp > 100 || temp == -1){
        break;
      }
      if (temp < min){
        min = temp;
      }
      pile += temp;
      std::cout << "Pile is " << pile << "\n";
      count++;
      std::cout << "Count " << count << "\n";
    }
    std::cout << "Your average was: " << (double)pile/count << ".\n";
    std::cout << "Your minimum was: " << min << ".\n";
    return 0;
}
intmin=101//比最大值高一个。
int桩=0;
整数计数=0;
内部温度=0;
int失败;
标准:温度>温度;
if(std::cin.fail()){

std::cout可以最小化复制?你提供了什么输入,程序产生了什么输出,为什么你认为这个输出不正确?@IgorTandetnik输入2,2,2和2.5将2.5加到平均值中,然后失败。它运行循环太晚了,不应该在2.5中添加。当你输入
2.5
 cin>>temp
2
读取为整数,并在句点处停止,因为它不是有效整数的一部分。下一轮,它将以句点开始读取,但由于没有字符可以作为整数使用而失败。换句话说,您的输入不是2、2、2和2.5;而是2、2、2和
.5