| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 556 人关注过本帖
标题:[求助]死循环!实在是菜的不行
只看楼主 加入收藏
nemozhang
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-6
收藏
 问题点数:0 回复次数:4 
[求助]死循环!实在是菜的不行

今天写了个程序,结果发现一个问题!请大虾们指点一二!
源程序代码如下:
#include<iostream>
using namespace std;

void main()
{
int year;
do
{
cout<<endl<<"请输入年份(格式为XXXX):";
cin>>year;
if(year<0||year>9999)
{
cout<<"输入错误!"<<endl;
cout<<endl<<"请输入年份(格式为XXXX):";
cin>>year;
}

}while(year<0||year>9999);

}

运行结果是:输入数字一切正常;如果输入的是字母的话就出现死循环了
反复的
请输入年份(格式为XXXX):输入错误!
跪求解释

搜索更多相关主题的帖子: 源程序 include 
2007-07-06 23:11
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
当然死循环,year是int型,输入字符流将被设置错误,残留的输入会导致死循环。

可以加如判断,使只能输入数字。

cin >> year;
while (cin.bad()){
cout << "bad input.\n";
cin.clear();
cin.ignore();
cin >> year;
}

Fight  to win  or  die...
2007-07-07 00:16
nemozhang
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-6
收藏
得分:0 
回复:(aipb2007)当然死循环,year是int型,输入字符...
程序我进行了调试,发现如果输入的是字符,year这个变量并没有被赋值,现在修改了一下,没有问题了!
早上看过斑竹的回帖后,又去查了一下CIN的详细,才明白了不少!
小弟感激万分!呵呵!


现在又出现个问题,我编的程序,需要多次调用这个循环,在二次调用这个循环的时候,再次出现了死循环这是为什么?
我尝试了一下,改了一下代码,将判断语句中的cin.bad()改成cin.fail(),就又正常了,能帮我解释一下吗?

[此贴子已经被作者于2007-7-7 9:25:05编辑过]


2007-07-07 08:46
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
晕,我的错,又笔误,我想写的就是cin.fail()

cin.bad()是输入流被不可恢复的破坏。
cin.fail()是可恢复的。

你的情况是后者,道理一样,你如果用cin >> 这样的形式做循环条件,那退出循环的时候,流就被设置了failbit或者eofbit,所以要清除流错误状态,同时清除残留在输入缓冲区里的输入,ignore()就有这个功能,当然也可以用sync()……还有几个函数,自己查下,都可以。

我太粗心了,呵呵~不好意思。

Fight  to win  or  die...
2007-07-07 09:57
nemozhang
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-6
收藏
得分:0 
回复:(aipb2007)晕,我的错,又笔误,我想写的就是...

呵呵,没关系了,问题不都解决了吗!没到论坛提问,俺都不知道还有这门道的,看来还需要多多学习才是啊!


2007-07-07 23:53
快速回复:[求助]死循环!实在是菜的不行
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019280 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved