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

What's the difference between cin>>x;cin>>y and cin>>x>>y

本文关键字:gt cin 区别 什么      更新时间:2023-10-16

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

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

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

阅读此问题,以了解如何处理C 中的错误类型输入并清洁该缓冲区。

c 流(如std::cin),在阅读int时,请停止任何不属于积分值的字符。其中包括'.'字符。

读取到int时,没有读取浮点值或将浮点值转换为int的中间步骤。int是直接读取的,因此,如果数字后有任何非数字,则读数将停止 - 并且非数字将在下流中留在流中。

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

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

首先,cin>>x;读取数字69,这一切。它是正确的整数编号。其他角色留在缓冲区中。

第二,cin>>y;尝试从流读取并获取.8,并且它也更正浮点数。

主要原因,当最终用户进入需要整数的浮点数时,程序不仅考虑了整数,而且还分配了该程序的存储浮点以前输入到下一个变量的数字是缓冲区 - 这实际上是移动到另一个内存或数据存储的数据的临时存储。

要解决此问题,您需要使用cin.ignore()函数,这是一个出色的功能,用于忽略和/或从输入缓冲区中清除一个或多个字符。

例如,如果您添加了一个std::cin. ignore(100,'n'),它将清除缓冲区以允许程序读取并考虑下一个条件或语句。syntax中的数字100在指定边界之前的特定数量的字符(100个字符) 在指定边界之前,在这种情况下,Newline字符'n',但它可以可以当然,要有任何数字 - 取决于您的字符数量。

另外,请注意,在您的输出中

(cout&lt;&lt;&quot;&quot the输入号是x =&quord;&lt; endl;)

(cout&lt;&lt;&quord float号码是y =&quot;&lt; endl;)

您没有引用X和Y变量,因此您可能无法获得预期的结果,因为该程序不会输出存储在这些变量中的值。

所以,请在下面查看我的方法:

#include<iostream>
using namespace std;
int main()
{
  int x;
  
  float y;
  
  cout<<"Please input an integer:"<<endl;
  
  cin>>x;
  
  cout<<"The entered integer is: "<<x<<endl;
    
  std::cin.ignore(100, 'n');
  
  cout<<"Please input a floating point number: "<<endl;
  
  cin>>y;
  
  cout<<"The entered float number is: "<<y<<endl;
  
  return 0;
  
}