2 fandy chen Fandy_Chen 于 2016.02.20 10:06 提问

C++问题, 为什么输入0.99会进入死循环
c++

在学习C++时调试这段代码在month 输入**小于1的小数**时,进入死循环,还请大神帮忙解释一下,感谢

int userYear, userMonth;
cout<< "Please input year:"<<endl;
cin >> userYear;

cout<<"Please input month:"<<endl;
cin >> userMonth;

while(userMonth > 12 || userMonth < 1){
    cout<<"The month is not legal, Please input again: "<<endl;
    cin >> userMonth;
}
![图片说明](http://img.ask.csdn.net/upload/201602/20/1455933865_719630.png)

3个回答

caozhy
caozhy   Ds   Rxr 2016.02.20 10:51
已采纳

0.99是小数,但是userMonth你用的是int,先解析出了1,进入循环,遇到.,cin不会读取新的userMonth,之后一直是1,就死了。
调试下就知道了。

Fandy_Chen
Fandy_Chen 回复Fandy_Chen: cin.clear(); while(cin.get()!='\n');
接近 2 年之前 回复
Fandy_Chen
Fandy_Chen int temp; cout<<"The month is not legal, Please input again: "<<endl; cin>>temp; userMonth = temp;
接近 2 年之前 回复
Fandy_Chen
Fandy_Chen 我改成了有什么好的解决办法吗
接近 2 年之前 回复
u010536377
u010536377   2016.02.20 10:39

0.99取int是0,0<1 ,死循环

Fandy_Chen
Fandy_Chen 是0应该会进入循环体, 但循环体里面的cin语句应该会等待再次输入
接近 2 年之前 回复
qq_33658867
qq_33658867   2016.02.20 10:30

你的usemonth是int型的,输入的0.99会当成1,所以死循环

Fandy_Chen
Fandy_Chen 是1应该执行完毕才对啊,
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!