C++循环体中毒进入死循环

莫肖 发布于 2012/09/22 18:59
阅读 443
收藏 0
定义了两个整形变量,下面有一个循环输入的语句,当输入第一个数为字符时,则会出现无限循环,正如中毒。为什么会出现这种情况?求高手指点。谢谢!

代码如下:

#include<iostream>
using namespace std;

void main()
{
int a;
int num;
cout<<"输入整数";
cin>>a; //如果此处输入一个字符,则进入while的死循环。
while(a !=0)
{
cout<<"输入编号:";
cin>>num;  //还是刷!!!这些语句没没有因为有输入而停止
cout<<"输入整数";
cin>>a;
}
}
加载中
0
魔方帅帅
魔方帅帅

额,这个是因为cin的错误标志没有被清除导致的。需要手动检查标志并且清除标志,同时清除缓冲,这样下次可以正确读取。你用下面的代码试试,应该就可以了。

	while(1)
	{
	    cout << "please input " << endl;
	    cin >> a ;

	    if(cin.fail())
	   {
		cin.sync();//这句清除缓冲
		cin.clear();//这句清除错误标志 。
	   }
	}

莫肖
莫肖
确实,之前一直都没注意到这个问题,虽然是个细节问题,但是我想里面还是有很大的学问啊,再声感谢大虾指点呐~~
0
Timor君
Timor君
输入流被破坏?在cin>>a 之后加入 cin.clear()试试看
0
中山野鬼
中山野鬼
加个 \n 试试。哈。COUT,CIN没有仔细分析过。但我不太相信底层实现和C的printf有较大偏差。缓冲BUF的问题。如 @远山如此 的建议。
返回顶部
顶部