为什么这段代码不起作用?
int x;
cin >> x;
根据0x1a
的输入,我得到x == 0
而不是26
。
为什么?
答案 0 :(得分:26)
我相信为了使用十六进制你需要做这样的事情:
cin >> hex >> x;
cout << hex << x;
你也可以用dec和oct等替换hex。
答案 1 :(得分:14)
实际上,您可以强制 >>
运算符获取并正确解释前缀0
和0x
。您所要做的就是删除std::cin
的默认设置:
std::cin.unsetf(std::ios::dec);
std::cin.unsetf(std::ios::hex);
std::cin.unsetf(std::ios::oct);
现在,当您输入0x1a时,您将收到26。
答案 2 :(得分:3)
在使用<<
时,请考虑>>
和std::cout/std::cin
:
std::cout << x
表示从 x
std::cin >> x
表示将值放入 x
注意操作员指向的方向。这应该会给你一个关于他们在使用这些函数时做了什么的提示。
结果是0而不是26的原因是因为std::cin
将解析输入中的所有非数字字符。毕竟,x
是一个int,它不会将0x
识别为十六进制数的一部分。如果输入为9x2
(结果只是9
),则会产生相同的行为。
答案 3 :(得分:1)
您的代码应为:
int x;
cin >> hex >> x;
默认情况下,cin
预计读入的任何数字都是十进制数。显然,0x1a
不是有效的小数,因此无法进行转换。为了使其工作,我们必须使用流修饰符 hex
,它提示cin
期望从十六进制而不是十进制转换数字。
在这种情况下,0x
前缀是可选的,因此输入10
将被读取并存储为十进制16。
答案 4 :(得分:0)
#include<iostream>
using namespace std;
int main()
{
int data[16];
cout << "enter the 16 hexadecimal numbers\n";
for(int i = 0;i < 16;i++)
{
if(cin >> hex >> data[i])
cout << "input worked\n";
else{
cin.clear();
cout << "invalid input\n";
}
}
}