cin>>x;cin>>y 和 cin>>x>>y 有什么区别
What's the difference between cin>>x;cin>>y and cin>>x>>y
我编写一个小单个程序。这是代码:
#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;
}
- C++中的cin.ignore()函数不适用于整个流
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- Problems with std::cin.fail()
- EASTL矢量<向量<int>>连续的
- 由cin中的字符串中未捕获空白引起的分割错误
- 在C++中使用Cin,我如何在1行中输入
- 将 cin 限制为只有一个
- cin >> int 给定一个字符串将 int 赋值为 0
- istream std::cin如何修改自定义istream缓冲区
- C++ 将 CIN 值存储到任何类型的数组中
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- cin 的十进制输入验证?
- Turbo C++ cin() 不能与 gets() 一起使用
- 使用 cin 时接受小数点后的 2 位数字
- 在 std::getline 和 std::cin 期间卡在循环中
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 为什么我的两个 cin 语句没有在程序结束时运行?
- C++ cin.ignore() 跳过循环
- CIN是逻辑1还是0?
- 如何运行多行 cin?