我写了一个小程序。这是代码:
#include<iostream>
using namespace std;
int main()
{
int x;
float y;
cout<<"Please input an int number:"<<endl;
cin>>x;
cout<<"The input number is x= "<<endl;
cout<<"Please input a float number:"<<endl;
cin>>y;
cout<<"The float number is y= "<<endl;
return 0;
}
但是当我第一次输入数字69.8时,输出是
Please input an int number:
69.8
The int number is x= 69
The float number is y= 0.8
我以为它会将69.8转移到69,然后让我输入下一个数字y,但它会自动输入,为什么?
答案 0 :(得分:2)
这是因为程序需要一个int
并且你给它一个double
。然后,所有可以转换为int
的字符都将被转换,但那些不能转换为缓冲区的字符将被转换。下次调用std::cin
时,程序将读取缓冲区中剩余的内容,这就是自动设置y
的原因。
阅读此question以了解如何在C ++中处理错误的类型输入并清理该缓冲区。
答案 1 :(得分:2)
C ++流(如std::cin
),在读取int
时,停止任何不属于整数值的字符。这包括'.'
个字符。
当读取int
时,没有中间步骤来读取浮点值或将浮点值转换为int
。直接读取int
,因此如果在数字后面有任何非数字,则读取将停止 - 并且非数字将保留在流中以供下一操作读取。
第一个cin>>x;
因此从流中读取69
,并让'.'
等待阅读。 cin >> y
遇到'.'
,将其视为浮点值的一部分,然后继续。因此,y
会收到值0.8
。
答案 2 :(得分:1)
您输入的字符串分为两部分。
首先,cin>>x;
读取数字69
等等。它是正确的整数。其他字符留在缓冲区中。
其次,cin>>y;
尝试从流中读取并获取.8
并且它也正确浮点数。