18

为什么这段代码不起作用?

int x;
cin >> x;

通过输入0x1aI get thatx == 0而不是26

为什么?

4

5 回答 5

34

我相信为了使用十六进制,您需要执行以下操作:

cin >> hex >> x;
cout << hex << x; 

您还可以用 dec 和 oct 等替换 hex。

于 2012-11-02T13:54:47.880 回答
25

实际上,您可以强制>>操作员获取并正确解释前缀00x. 您所要做的就是删除以下的默认设置std::cin

std::cin.unsetf(std::ios::dec);
std::cin.unsetf(std::ios::hex);
std::cin.unsetf(std::ios::oct);

现在,当您输入 0x1a 时,您将收到 26。

于 2016-12-11T16:51:16.497 回答
3

考虑<<>>使用时std::cout/std::cin这样:

std::cout << x表示从中获取值 x

std::cin >> x意味着将值放入 x

注意操作员指向的方向。这应该给您一个提示,了解他们在使用这些功能时会做什么。

结果是 0 而不是 26 的原因是因为std::cin将解析输入中的所有非数字字符。毕竟,x是一个int,它不会识别0x为十六进制数的一部分。如果输入是9x2(结果只是9),它将具有相同的行为。

于 2012-11-02T13:55:56.357 回答
1

您的代码应为:

int x;
cin >> hex >> x;

默认情况下cin,任何读入的数字都是十进制的。显然,0x1a不是有效的小数,因此无法进行转换。为了让它工作,我们必须使用流修饰符 hex,它提示cin期望从十六进制而不是十进制转换数字。

在这种0x情况下,前缀是可选的,因此输入10将被读取并存储为十进制 16。

于 2012-11-02T13:55:35.540 回答
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";
        }
    }
}
于 2015-09-19T19:00:12.823 回答