猿问

为什么“cin” 会被直接跳过,求详细解释?

int start,day,re;
cout<<"Hi,do you want to know what day is it in the future?Let this program help you!"<<endl;
cout<<"Please ender what day is it today,for example,if today is Sunday please enter 0"<<endl;
cin>>start;

cout<<"How many days after today?(less than 366!!!!)"<<endl;
cin>>day;

如上所示,在第一个cin时候输入一个小数给start,则第二个cin直接被跳过,就是不能给day赋值了?求牛人解释。
用F10 调试后,发现:start的值为3(如输入3.5),但day的值一直没有变,也是直接跳过。

慕田峪9158850
浏览 676回答 2
2回答

DIEA

因为start定义为整型变量,所以不能接受小数,第二个cin不是被跳过,而是当你输入.的时侯,第一个cin就异常结束了,所以.后面输入的数字就留在cin的缓冲区了,当进行第二个cin输入的时侯,留在缓冲区中的数字就当作第二个cin的输入赋给变量day了,不知是不是这样的,你实验一下便知。

森林海

不是被跳过了,而是你定义的是两个整数,当你输入的第一个是一个小数的时候,整数部分被赋给第一个数了,小数部分放在了缓存里。当执行到应该输入第二个数的时候,电脑直接将缓存里的小数部分当作第二个输入,但因为第二个数应该是整数,所以相当于输入的是一个无效的数,小数部分没有被赋给day. day 的内容还是无定义状态的。你可以尝试下第一个数输入一个整数,第二个数的时候输入如 .35并观察day的值,你就会明白了。
随时随地看视频慕课网APP
我要回答