【问题标题】:What's the difference between cin>>x;cin>>y and cin>>x>>ycin>>x;cin>>y 和 cin>>x>>y 有什么区别
【发布时间】:2017-10-05 08:29:47
【问题描述】:

我写了一个小程序。代码如下:

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

【问题讨论】:

标签: c++


【解决方案1】:

这是因为程序期望 int 而你给它一个 double。然后所有可以转换为int 的字符都将被转换,但那些不能转换的字符将留在缓冲区中。在下一次调用std::cin 时,程序将读取缓冲区中剩余的内容,这就是自动设置y 的原因。

阅读此question 以了解如何在 C++ 中处理错误的类型输入并清理该缓冲区。

【讨论】:

    【解决方案2】:

    C++ 流(如std::cin)在读取int 时,会在任何不属于整数值的字符处停止。这包括一个'.' 字符。

    读取int 时,没有读取浮点值或将浮点值转换为int 的中间步骤。 int 是直接读取的,所以如果一个数字后面有任何非数字,读取将停止 - 非数字将留在流中以供下一次操作读取。

    因此,第一个cin&gt;&gt;x; 从流中读取69,并留下'.' 等待读取。 cin &gt;&gt; y 遇到 '.',将其视为浮点值的一部分,然后继续。因此y 接收到值0.8。

    【讨论】:

      【解决方案3】:

      您输入的字符串分为两部分。

      首先,cin&gt;&gt;x; 读取号码 69 以及所有内容。它是正确的整数。其他字符留在缓冲区中。

      其次,cin&gt;&gt;y; 尝试从流中读取并获取 .8 并且它也正确的浮点数。

      【讨论】:

        猜你喜欢
        • 2013-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        • 2020-09-12
        • 2023-04-05
        • 1970-01-01
        相关资源
        最近更新 更多