繁体   English   中英

“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>>a; 工作正常。 我曾经读过cin.get()也用于获取变量的值。 除了这个,它还有其他用途吗?

谢谢,

像许多新手一样,您对types有点困惑。 无论a是什么类型, cin >> a都会从cin读取到变量a中,因此floatintstd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM