[英]How is "cin>>" different from "cin.get"? OR Is it not?
我正在为乘法表编写程序......我使用a=cin.get();
和cin>>a;
输入值。 我得到了不同的结果。 代码是:
#include"pch.h"
#include<iostream>
using namespace std;
int main()
{
float a, b;
cout << "Enter the number:";
a = cin.get();
cout << "The Table for the given number is:" << endl;
for (b = 1; b <= 10; ++b)
{
cout << a << " * " << b << " = " << a * b << endl;
}
return 0;
}
另一个是:
#include"pch.h"
#include<iostream>
using namespace std;
int main()
{
float a, b;
cout << "Enter the number:";
cin >> a;
cout << "The Table for the given number is:" << endl;
for (b = 1; b <= 10; ++b)
{
cout << a << " * " << b << " = " << a * b << endl;
}
return 0;
}
cin>>a;
那个cin>>a;
工作正常。 我曾经读过cin.get()
也用于获取变量的值。 除了这个,它还有其他用途吗?
谢谢,
像许多新手一样,您对types有点困惑。 无论a
是什么类型, cin >> a
都会从cin
读取到变量a
中,因此float
、 int
、 std::string
等都可以与>>
。 这是一个简化,但现在已经足够接近了。
a = cin.get()
仅用于读取单个字符,它返回输入中的下一个字符。 第一个程序中发生的事情是get()
中的 char 值被转换为浮点值。 跳过细节但这不是很有意义的事情,这就是为什么你会得到奇怪的结果。
>>
和get()
之间的另一个区别是>>
会跳过空格,而get()
不会。 因此,如果您想读取单个字符而不管它是否为空格,请使用get()
否则使用>>
。
>>
运算符是二元右移运算符。 这已被重载 - 在<istream>
类中 - 具有不同 - 且非常复杂 - 的功能。 我会说:成为一种高级别的“方法”。
get()
是<istream>
一种更简单的方法,它不能处理数据类型(浮点数等)。
在内部, >>
运算符使用与get()
/ getline()
类似的逻辑,但随后它应用了魔法:它将输入值解析为所需的数据类型(在您的情况下为 float)。
而且他们并没有停止解析,这个操作符有一个复杂的逻辑来处理格式和其他请求。 例子:
cin >> hex >> a //you can input "0x3f9d70a4" to get 1.23
检查“操作员>> ”的描述以获取更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.