通过while循环将有限输入从用户读入整数变量

时间:2015-01-14 01:08:33

标签: c++

我刚刚完成了计算机科学课程的第一个c ++程序,我陷入了两难境地。问题出在while循环语句中,它是这样的:

int main()
{
    int answer;
    while(!(std::cin >> answer)) // runs until number is read
    {
        std::cin.clear();
        std::cin.ignore();
        std::cin >> answer;
    }
 // rest of code
    return 0;
}

基本上在命令提示符下,我得到了这种不良行为:

用户输入:

q

5

6

我的程序应该在读取前5个(第一个数字)时结束,但它没有,它会提示我再次输入以使其工作。

1 个答案:

答案 0 :(得分:5)

您不需要while循环中的行来读取该数字。当你拥有它时,它会在成功读取5后期待另一个数字。

while(!(std::cin >> answer))
{
    std::cin.clear();
    std::cin.ignore();

    // Remove this line.
    // std::cin >> answer;
}

<强>更新

一种更简洁的方式来处理EOF,并且在遇到错误输入时忽略其余行,而不是忽略一个字符。

#include <iostream>
#include <limits>

int main()
{
   int answer;
   while(!(std::cin >> answer)) // runs until number is read
   {
      if ( std::cin.eof() )
      {
         std::cout << "Got to the end of input stream before a reading number\n";
         return -1;
      }

      std::cin.clear();
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
   }
   std::cout << "Got " << answer << std::endl;
   return 0;
}