c++,如果我输入的不是指定的int,为什么就进入死循环了啊

#include<iostream>#include<ctime>usingnamespacestd;booltousha();intmain(){charf='0';i... #include<iostream>
#include<ctime>

using namespace std;
bool tousha();
int main()
{ char f='0';
int n=9999;

while(true)
{
int yuan=0;
cout<<"请输入投沙数量:"<<endl;
cin>>n;
srand((unsigned)time(NULL));
for(int i=1;i<=n;++i)
{
if(tousha()==true)yuan+=1;
}
cout<<"投沙总数为\t"<<n<<endl;
cout<<"圆内沙粒为\t"<<yuan<<endl;
cout<<"pi大约值为\t"<<(double)yuan*4/n<<endl;
cout<<"退出请输出X。继续请按任意键"<<endl;
cin>>f;
if(f=='x'||f=='X')break;
}
return 0;
}
bool tousha()
{
double x,y;
x=rand()/(double)RAND_MAX;
y=rand()/(double)RAND_MAX;
if(x*x+y*y<=1)
return true;
return false;
}

如果完全正常操作,这个程序可以正常运行,但是如果在要求输入n的时候我输入的不是一个int,比如字母,就会进入无限循环,结果像
请输入投沙数量:
a
投沙总数为 9999
圆内沙粒为 7827
pi大约值为 3.13111
退出请输出X。继续请按任意键
请输入投沙数量:
投沙总数为 9999
圆内沙粒为 7827
pi大约值为

…………
无限循环下去,为什么会这样呢??
展开
 我来答
wangbwell
2011-03-03 · TA获得超过1238个赞
知道小有建树答主
回答量:490
采纳率:0%
帮助的人:781万
展开全部
看下面的修改: 运行一下 你自然知道为什么 ?
输入流问题!!!!
cin读到字符与int不匹配 并没有从输入缓冲区remove掉你输入的字符
这样下次循环到时 由于输入缓冲区有数据 不等待用户(你)输入数据 便开始读数据
但是还是字符 一直这样错下去 自然死循环了 看下面的失败判断和清除缓冲区的办法
while(true)
{
int yuan=0;
cout<<"请输入投沙数量:"<<endl;
if ( (cin>>n).fail() ) {
cout<<"输入错误 n没有被正确设置,仍使用原值n="<<n<<endl;
cin.clear();
}
srand((unsigned)time(NULL));
匿名用户
2011-03-03
展开全部
#include<iostream>
#include<ctime>

using namespace std;
bool tousha();
int main()
{
char f='0';
int n=9999;

while(true)
{
int yuan = 0;

cin>>f;
if ( (f == 'x')||(f == 'X'))
{
break;
}

cout<<"请输入投沙数量:"<<endl;
cin>>n;

srand((unsigned)time(NULL));

for(int i=1;i<=n;++i)
{
if(tousha()==true)
yuan+=1;
}
cout<<"投沙总数为\t"<<n<<endl;
cout<<"圆内沙粒为\t"<<yuan<<endl;
cout<<"pi大约值为\t"<<(double)yuan*4/n<<endl;
cout<<"退出请输出X。继续请按任意键"<<endl;

}
return 0;
}
bool tousha()
{
double x,y;
x=rand()/(double)RAND_MAX;
y=rand()/(double)RAND_MAX;
if(x*x+y*y<=1)
return true;
return false;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式