为什么这段代码不起作用?
int x;
cin >> x;
通过输入0x1a
I get thatx == 0
而不是26
。
为什么?
我相信为了使用十六进制,您需要执行以下操作:
cin >> hex >> x;
cout << hex << x;
您还可以用 dec 和 oct 等替换 hex。
实际上,您可以强制>>
操作员获取并正确解释前缀0
和0x
. 您所要做的就是删除以下的默认设置std::cin
:
std::cin.unsetf(std::ios::dec);
std::cin.unsetf(std::ios::hex);
std::cin.unsetf(std::ios::oct);
现在,当您输入 0x1a 时,您将收到 26。
考虑<<
和>>
使用时std::cout/std::cin
这样:
std::cout << x
表示从中获取值 x
std::cin >> x
意味着将值放入 x
注意操作员指向的方向。这应该给您一个提示,了解他们在使用这些功能时会做什么。
结果是 0 而不是 26 的原因是因为std::cin
将解析输入中的所有非数字字符。毕竟,x
是一个int,它不会识别0x
为十六进制数的一部分。如果输入是9x2
(结果只是9
),它将具有相同的行为。
您的代码应为:
int x;
cin >> hex >> x;
默认情况下cin
,任何读入的数字都是十进制的。显然,0x1a
不是有效的小数,因此无法进行转换。为了让它工作,我们必须使用流修饰符 hex
,它提示cin
期望从十六进制而不是十进制转换数字。
在这种0x
情况下,前缀是可选的,因此输入10
将被读取并存储为十进制 16。
#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";
}
}
}