cin状态导致进入死循环

Guy_Fwakes 2014-03-06 11:04:56
我想测试一下,cin输入错误的状态,写了个小程序,但是进入了死循环
#include<iostream>
using namespace std;

int main()
{
int i;
cout << "请输入一个数字:"<< endl;
cin >> i;
while(!cin)
{
cout << "输入错误!" << endl;
cout << cin << endl;
cin.clear();
cout << cin << endl;
cin >> i;
}

return 0;
}



本人初学,希望大神不吝赐教,谢谢
...全文
222 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
SKATE11 2014-03-06
  • 打赏
  • 举报
回复
while(!cin) { cout << "输入错误!" << endl; cout << cin << endl; cin.clear(); cout << cin << endl; cin >> i; } //用cin>>i来判断
JiMoKuangXiangQu 2014-03-06
  • 打赏
  • 举报
回复
循环里面的语句: cin >> i; 在你输入0x...永远也不可能成功,即!cin永远为真,程序能不死循环吗?
mujiok2003 2014-03-06
  • 打赏
  • 举报
回复
输入错误之后要重置cin的状态
JiMoKuangXiangQu 2014-03-06
  • 打赏
  • 举报
回复
lz的这句:
cout << cin << endl;
你的目的是要输出cin对象吗?
JiMoKuangXiangQu 2014-03-06
  • 打赏
  • 举报
回复
引用 2 楼 hzt19901012 的回复:
[quote=引用 1 楼 JiMoKuangXiangQu 的回复:] [quote=引用 楼主 hzt19901012 的回复:] 我想测试一下,cin输入错误的状态,写了个小程序,但是进入了死循环
#include<iostream>
using namespace std;

int main()
{
  int i;
  cout << "请输入一个数字:"<< endl;
  cin >> i;
   while(!cin)
  {
	cout << "输入错误!" << endl;
	cout << cin << endl;
	cin.clear();
	cout << cin << endl;
	cin >> i;
  }
  
  return 0;
}
本人初学,希望大神不吝赐教,谢谢
#include<iostream>
using namespace std;

int main()
{
	int i;
	cout << "请输入一个数字:"<< endl;
	cin >> hex >> i;
	while (!cin)
	{
		cout << "输入错误!" << endl;
		cout << cin << endl;
		cin.clear();
		cout << cin << endl;
		cin >> i;
	}

	return 0;
}
[/quote] 没用啊,你将输入设置hex有意义吗?[/quote]
#include<iostream>
using namespace std;

int main()
{
	int i;
	cout << "请输入一个数字:"<< endl;
	cin >> hex >> i;
	cout << hex << i << endl;
#if 0
	while (!cin)
	{
		cout << "输入错误!" << endl;
		cout << cin << endl;
		cin.clear();
		cout << cin << endl;
		cin >> i;
	}
#endif

	cin.get();
	return 0;
}
自己看结果。 你的循环是在第一次输入失败的时候进入,这个逻辑似乎不通。如果你不把输入改成hex,只会读取0x...的0而已。
Guy_Fwakes 2014-03-06
  • 打赏
  • 举报
回复
引用 1 楼 JiMoKuangXiangQu 的回复:
[quote=引用 楼主 hzt19901012 的回复:] 我想测试一下,cin输入错误的状态,写了个小程序,但是进入了死循环
#include<iostream>
using namespace std;

int main()
{
  int i;
  cout << "请输入一个数字:"<< endl;
  cin >> i;
   while(!cin)
  {
	cout << "输入错误!" << endl;
	cout << cin << endl;
	cin.clear();
	cout << cin << endl;
	cin >> i;
  }
  
  return 0;
}
本人初学,希望大神不吝赐教,谢谢
#include<iostream>
using namespace std;

int main()
{
	int i;
	cout << "请输入一个数字:"<< endl;
	cin >> hex >> i;
	while (!cin)
	{
		cout << "输入错误!" << endl;
		cout << cin << endl;
		cin.clear();
		cout << cin << endl;
		cin >> i;
	}

	return 0;
}
[/quote] 没用啊,你将输入设置hex有意义吗?
JiMoKuangXiangQu 2014-03-06
  • 打赏
  • 举报
回复
引用 楼主 hzt19901012 的回复:
我想测试一下,cin输入错误的状态,写了个小程序,但是进入了死循环
#include<iostream>
using namespace std;

int main()
{
  int i;
  cout << "请输入一个数字:"<< endl;
  cin >> i;
   while(!cin)
  {
	cout << "输入错误!" << endl;
	cout << cin << endl;
	cin.clear();
	cout << cin << endl;
	cin >> i;
  }
  
  return 0;
}
本人初学,希望大神不吝赐教,谢谢
#include<iostream>
using namespace std;

int main()
{
	int i;
	cout << "请输入一个数字:"<< endl;
	cin >> hex >> i;
	while (!cin)
	{
		cout << "输入错误!" << endl;
		cout << cin << endl;
		cin.clear();
		cout << cin << endl;
		cin >> i;
	}

	return 0;
}
赵4老师 2014-03-06
  • 打赏
  • 举报
回复
cin.sync();cin.clear();
滴答滴答D 2014-03-06
  • 打赏
  • 举报
回复
引用 7 楼 mougaidong 的回复:
http://blog.csdn.net/mougaidong/article/details/6882345
也许就如他说的,没有略过cin缓冲吧,忽略0继续试

65,212

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧