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;
}
![图片说明](https://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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言中数组越界访问造成死循环现象
本篇文章纯属娱乐,没太多技术性的东西。只是我觉得还比较有意思,所以记一下!>         大家请看这样一段代码(工具:VC++6.0): #include int main(int argc, char *argv[]) { int i; int arr[10];/* 这里注意循环变量i与数组arr的定义顺序 */ for(i = 0; i <= 10; i++)/*
并发的HashMap为什么会引起死循环?
今天研读Java并发容器和框架时,看到为什么要使用ConcurrentHashMap时,其中有一个原因是:线程不安全的HashMap, HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,查找时会陷入死循环。纠起原因看了其他的博客,都比较抽象,所以这里以图形的方式展示一下,希望支持! (1)当往HashMap中添加元素时,会
解决scanf或者cin造成的死循环问题
最近有个同学拿了一个程序说让我帮忙给调试一下,我拿到看了一下发现,问题确实很怪异,他在写一个console程序并且希望能有一个简单的菜单,用户输入0-5之间的整数进行选择,输入错误会输出提示信息并要求重新输入,但是如果用户输入是一个字符的话,程序就会陷入死循环,不停地打印提示信息。   问题明确了,答案也就出来了,显然是因为scanf函数或者cin读取输入字符时的问题,我用C写了小程序来演示
hashmap死循环原因总结
本文受http://pt.alibaba-inc.com/wp/dev_related_969/hashmap-result-in-improper-use-cpu-100-of-the-problem-investigated.html 的启发,引用了其中的思想,对此表示感谢。          来到杭州实习有一段日子了,很长时间都没有更新博客了,前几天,闲来无事,随便翻了一本书,毕玄的《
java 中的死循环 for(;;)
输出2 4 6  顺序可以改变 并统计程序执行了多少次 利用到了random 产生随机数 package mihe;import java.util.Random;public class Test03 { public static void main(String[] args) { Random random = new Random(); int count = 0; for (...
c++循环变量溢出造成死循环
今天写程序犯了个错,记录一下。 大致代码如下
在并发环境下使用HashMap导致的线程死循环问题
最近和维护的一个同事定位产品的线上问题,遇到了线程卡死的情况。最终的根源就是:缓存是通过HashMap实现 的,而且没有使用同步机制。在多线程环境下,更新/获取HashMap的值,导致了线程进入了死循环。JDK文档中明确说了HashMap不是线程安全的,所以在没有任何加锁的情况下,在多线程中使用HashMap本身就是严重的错误。
HashMap多线程死循环问题
正如上篇文中所说,HashMap不是线程安全的,在被多线程共享操作时,会有问题,具体什么问题呢,一直没有个清晰的理解,今天写了个测试程序调了一下,才明白其中道理。 主要是多线程同时put时,如果同时触发了rehash操作,会导致HashMap中的链表中出现循环节点,进而使得后面get的时候,会死循环。【关于什么是rehash,读者可以自行去google了】 本文主要参考了:http://coo
《Java困惑》:多并发情况下HashMap是否还会产生死循环
《Java困惑》:多并发情况下HashMap是否还会产生死循环今天本来想看下了ConcurrentHashMap的源码,ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现,在看很多博客在介绍ConcurrentHashMap之前,都说HashMap适用于单线程访问,这是因为HashMap的所有方法都没有进行锁同步,当多线程访问的时候容易找出死循环。虽然
c++ cin一个整数 输入其它字符产生死循环错误的解决方法。
#include #include using namespace std; typedef struct node { string str; node* next; }node; node *top = NULL; void create() { if (top != NULL) { cout << "stack is existing" << endl;