"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
是什么类型,因此 float
、int
、std::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>>" 了解更多信息。
我正在编写一个乘法表程序...我使用 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
是什么类型,因此 float
、int
、std::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>>" 了解更多信息。