cin>> x; cin>> y和cin>> x>> y之间有什么区别

时间:2017-10-05 08:29:47

标签: c++

我写了一个小程序。这是代码:

#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,但它会自动输入,为什么?

3 个答案:

答案 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并且它也正确浮点数。