【发布时间】:2021-12-26 10:27:33
【问题描述】:
为什么这段代码不起作用?
int x;
cin >> x;
输入0x1a 我得到x == 0 而不是26。
为什么?
【问题讨论】:
-
嗯,首先应该是
cin >> x...
为什么这段代码不起作用?
int x;
cin >> x;
输入0x1a 我得到x == 0 而不是26。
为什么?
【问题讨论】:
cin >> x...
我相信要使用十六进制,您需要执行以下操作:
cin >> hex >> x;
cout << hex << x;
你也可以用 dec 和 oct 等替换 hex。
【讨论】:
cout << bin << myInt; 之类的东西?
cin >> hex >> x >> dec;
实际上,您可以强制 >> 运算符获取并正确解释前缀 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::cin.unsetf(std::ios::basefield);
在使用std::cout/std::cin 时想想<< 和>>,如下所示:
std::cout << x 表示从x获取值
std::cin >> x 表示将值放入 x
注意操作员所指的方向。这应该会提示您在使用这些函数时它们会做什么。
结果是 0 而不是 26 的原因是 std::cin 将解析输入中的所有非数字字符。毕竟,x 是一个整数,它不会将0x 识别为十六进制数的一部分。如果输入是9x2(结果只是9),它的行为也会相同。
【讨论】:
您的代码应为:
int x;
cin >> hex >> x;
默认情况下cin 将期望读入的任何数字都是十进制的。显然,0x1a 不是有效的小数,因此无法进行转换。为了让它工作,我们必须使用 流修饰符 hex 提示 cin 期望从十六进制而不是十进制转换数字。
0x 前缀在这种情况下是可选的,因此输入 10 将被读取并存储为十进制 16。
【讨论】:
cin 改为读取十六进制呢?有没有像cout那样的标志?
std::hex 操纵器在流上设置基域格式标志之外,我没有其他办法。您可以在流上使用operator<< 或setf 来执行此操作。默认情况下,当创建cin 时,它设置为std::dec。 std::cout 也一样
#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";
}
}
}
【讨论】: