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>>
期望从输入流中提取一个整数,但那里还有其他东西(用户键入的非整数)。这会在输入流上设置错误状态。在这种状态下,cin >> ...
构造不再阻塞输入,因为流中已经有一些东西(不是整数),所以你会看到你的循环失控了。
需要发生的是,当输入不正确时,必须检测错误状态,必须刷新输入流,并且必须清除错误状态。此时,可能会输入新的(希望是正确的)输入。
示例如下:
#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>>
将不会尝试将其压缩到 int
变量中。错误状态被设置,循环变得混乱。同样,解决方法是检测错误状态,清除错误标志,清空输入缓冲区,如果需要,再次提示。
【讨论】:
【参考方案2】:嗯,这并不能回答原因,但它确实停止了混乱:system("pause")
void main()
int n 0 ;
while (true)
cout << "Enter a number: ";
cin >> n;
cout << n << endl;
system("pause");
【讨论】:
以上是关于cin >> 整数和 while 循环的主要内容,如果未能解决你的问题,请参考以下文章