【C++】“cin” 直接被跳过,求详细解释。

来源:百度知道 编辑:UC知道 时间:2024/05/17 22:58:40
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的值一直没有变,也是直接跳过。

不是被跳过了,而是你定义的是两个整数,当你输入的第一个是一个小数的时候,整数部分被赋给第一个数了,小数部分放在了缓存里。
当执行到应该输入第二个数的时候,电脑直接将缓存里的小数部分当作第二个输入,但因为第二个数应该是整数,所以相当于输入的是一个无效的数,小数部分没有被赋给day. day 的内容还是无定义状态的。

你可以尝试下第一个数输入一个整数,第二个数的时候输入如 .35
并观察day的值,你就会明白了。

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

这里2个问题:
1.关于start 定义为int ,而你输入的是3.5,那么程序只取整数部分赋值给start
2.关于day不但能输入而控制台自行关闭的问题。可以如下解决
int main()
{
cin.get();
return 0;
}

在main();函数最后的return 0;之前加上 cin.get();如果你没写return 0; 那么直接在main();函数函数体的最后写上一行 cin.get();

你定义的int,只能输入整数!输入一个小数时,小数点和后面部分就会给第二个数day