
一个c++程序的死循环问题
#include<iostream.h>#include<stdlib.h>main(){inta,b,i;a=100;for(i=1;i<=1000;i++){cout...
#include<iostream.h>
#include<stdlib.h>
main()
{
int a,b,i;
a=100;
for(i=1;i<=1000;i++)
{
cout<<"输入您所猜的数字"<<endl;
cin>>b;
if(b>1000)cout<<"error"<<endl;
if(b>100&&b<=1000)cout<<"enter the smaller"<<endl;
if(b==100)cout<<"congratuations!right"<<endl;
if(b<100&&b>=0)cout<<"enter the biger"<<endl;
if(b<0)cout<<"error"<<endl;
if(b==100)exit(0);
}
}
这个程序可以运行但是就在运行的时候如果输入小数点就会进入一个死循环。请高手帮忙解决并解释一下。
能不能解释一下为什么会这样。我是在学c++想弄清出来。为什么这个进入了一个死循环。一楼的改了后输入整数都进入了死循环了啊。 展开
#include<stdlib.h>
main()
{
int a,b,i;
a=100;
for(i=1;i<=1000;i++)
{
cout<<"输入您所猜的数字"<<endl;
cin>>b;
if(b>1000)cout<<"error"<<endl;
if(b>100&&b<=1000)cout<<"enter the smaller"<<endl;
if(b==100)cout<<"congratuations!right"<<endl;
if(b<100&&b>=0)cout<<"enter the biger"<<endl;
if(b<0)cout<<"error"<<endl;
if(b==100)exit(0);
}
}
这个程序可以运行但是就在运行的时候如果输入小数点就会进入一个死循环。请高手帮忙解决并解释一下。
能不能解释一下为什么会这样。我是在学c++想弄清出来。为什么这个进入了一个死循环。一楼的改了后输入整数都进入了死循环了啊。 展开
4个回答
展开全部
数据定义的是整型数,你输入小数后c++系统处理无法预见,所以你可以改为“cout<<"输入您所猜的整数"<<endl;”,或者将int型改为double或float并且后面出现的所有数字都要改为浮点型,在编译一下看看,如果还不对可以找我继续改
展开全部
一二楼的解释清楚点吧。一楼的MS 不可以用啊
二楼的 可以运行成功
对了,推荐你一本书 《高质量C++编程指南》
你自己找 也可以 发消息给我 可以传给你
二楼的 可以运行成功
对了,推荐你一本书 《高质量C++编程指南》
你自己找 也可以 发消息给我 可以传给你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2008-10-05
展开全部
没有死循环的问题,这个循环最多将执行1000次,如果你输入的数字是100,那么程序就会结束,为了适应VC++等编译环境,我对原程序做了一些适应性修改(不涉及循环内部的语句)之后在VC++6.0以及VC++2008中测试正常,如下所示:
************************************************
应该及时清空输入缓冲区,修改如下:
//---------------------------------------------------------------------------
#include<iostream>
using namespace std;
int main(void)
{
int a,b,i;
a=100;
for(i=1;i<=1000;i++)
{
cin.sync(); /*********************注意这里*/
cout<<"输入您所猜的数字"<<endl;
cin>>b;
if(b>1000)cout<<"error"<<endl;
if(b>100&&b<=1000)cout<<"enter the smaller"<<endl;
if(b==100)cout<<"congratuations!right"<<endl;
if(b<100&&b>=0)cout<<"enter the biger"<<endl;
if(b<0)cout<<"error"<<endl;
if(b==100)exit(0);
}
return 0;
}
//---------------------------------------------------------------------------
************************************************
应该及时清空输入缓冲区,修改如下:
//---------------------------------------------------------------------------
#include<iostream>
using namespace std;
int main(void)
{
int a,b,i;
a=100;
for(i=1;i<=1000;i++)
{
cin.sync(); /*********************注意这里*/
cout<<"输入您所猜的数字"<<endl;
cin>>b;
if(b>1000)cout<<"error"<<endl;
if(b>100&&b<=1000)cout<<"enter the smaller"<<endl;
if(b==100)cout<<"congratuations!right"<<endl;
if(b<100&&b>=0)cout<<"enter the biger"<<endl;
if(b<0)cout<<"error"<<endl;
if(b==100)exit(0);
}
return 0;
}
//---------------------------------------------------------------------------
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2008-10-05
展开全部
把b改为float型.
我弄错了,这个问题产生的原因是读到输入缓冲区的字符非法(相对于int型来说),所以一直不能被取走,导致死循环,解决的方法是刷新输入缓冲区,cin.sync是用来清除缓存区的数据流的,cin.clear是用来更改cin的状态标示符的,一般会配合使用.
我弄错了,这个问题产生的原因是读到输入缓冲区的字符非法(相对于int型来说),所以一直不能被取走,导致死循环,解决的方法是刷新输入缓冲区,cin.sync是用来清除缓存区的数据流的,cin.clear是用来更改cin的状态标示符的,一般会配合使用.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询