"cin>>" 与 "cin.get" 有何不同?或者不是吗?

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.get() 也用于获取变量的值。除了这个,它还有其他用途吗?

谢谢,

像许多新手一样,您对 类型 有点困惑。 cin >> a 将从 cin 读取到变量 a,无论 a 是什么类型,因此 floatintstd::string 等所有与 >> 一起工作。这是一个简化,但现在已经足够接近了。

a = cin.get() 仅用于读取单个字符,它 returns 输入中的下一个字符。在您的第一个程序中发生的事情是 get() 中的 char 值被转换为 float 值。跳过细节,但这没有多大意义,这就是为什么你会得到奇怪的结果。

>>get() 之间的另一个区别是 >> 会跳过空格,但 get() 不会。因此,如果您想读取单个字符而不管它是否为空格,则使用 get() 否则使用 >>.

总结:

>> 运算符是 二元右移运算符 。这已经过载 - 在 <istream> class 中 - 具有不同的 - 非常复杂的 - 功能。我会说:成为一个高层次的“方法”。

get()<istream> 的一种更简单的方法,它不能处理数据类型(浮点数等)。

详细:

在内部,>> 运算符使用与 get()/getline() 类似的逻辑,但它随后应用了魔法:it parses 将输入值转换为所需的数据类型(在您的情况下为浮点数)。

而且他们并没有停留在解析上,这个运算符有一个复杂的逻辑来处理格式化和其他请求。示例:

cin >> hex >> a    //you can input "0x3f9d70a4" to get 1.23 

查看 the description of "operator>>" 了解更多信息。