cin >> 整数和 while 循环

Posted

技术标签:

【中文标题】cin >> 整数和 while 循环【英文标题】:cin >> integer and while loop 【发布时间】:2015-02-20 07:26:39 【问题描述】:

下面的代码,

如果我输入一个字母或一个很长的数字,while 循环就会出错,这是为什么呢?

void main()

    int n 0 ;

    while (true)
    
        cout << "Enter a number: ";
        cin >> n;
        cout << n << endl;
    

【问题讨论】:

在这段代码中,它看起来更“可读”,而不是使用int n = 0; ***.com/q/18400620/716443的可能重复 【参考方案1】:

问题是operator&gt;&gt; 期望从输入流中提取一个整数,但那里还有其他东西(用户键入的非整数)。这会在输入流上设置错误状态。在这种状态下,cin &gt;&gt; ... 构造不再阻塞输入,因为流中已经有一些东西(不是整数),所以你会看到你的循环失控了。

需要发生的是,当输入不正确时,必须检测错误状态,必须刷新输入流,并且必须清除错误状态。此时,可能会输入新的(希望是正确的)输入。

示例如下:

#include <iostream>
#include <limits>

using namespace std;

int main () 
  int x = 0;
  while(true) 
    cout << "Enter a number: ";
    if( ! (cin >> x) ) 
      cin.clear();
      cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
      cerr << "Invalid input. Try again.\n";
    
    else 
      cout << "\t..." << x << "...\n";
    
  
  return 0;

“非常大的数字”也会导致这种情况的原因是非常大的数字(超过 int 的数字限制的数字)也不是 int,因此,如果您尝试将值读入int,也不会从输入流中读取。它可能看起来像一个整数,但如果它超出了 int 类型的范围,operator&gt;&gt; 将不会尝试将其压缩到 int 变量中。错误状态被设置,循环变得混乱。同样,解决方法是检测错误状态,清除错误标志,清空输入缓冲区,如果需要,再次提示。

【讨论】:

【参考方案2】:

嗯,这并不能回答原因,但它确实停止了混乱:system("pause")

void main()

    int n 0 ;

    while (true)
    
        cout << "Enter a number: ";
        cin >> n;
        cout << n << endl;

        system("pause");
    


【讨论】:

以上是关于cin >> 整数和 while 循环的主要内容,如果未能解决你的问题,请参考以下文章

cin >>type 循环中执行怎么被跳过了??

while(cin>>str)循环结束问题&cin相关问题

cpp-while循环

while (cin>>str)退出死循环

在线编程的简单输入输出

请问高手,这个while(cin>>s)啥时候结束????