18

このコードが機能しないのはなぜですか?

int x;
cin >> x;

私の入力で0x1aそれを取得しx == 0、ではありません26

なんで?

4

5 に答える 5

34

ヘックスを使用するには、次のようなことをする必要があると思います。

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

16進数をdecやoctなどに置き換えることもできます。

于 2012-11-02T13:54:47.880 に答える
25

実際には、>>オペレーターにプレフィックス0とを取得して適切に解釈させることができます0x。のデフォルト設定を削除するだけです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

オペレーターが指している方向に注意してください。それはあなたにこれらの関数を使うとき彼らが何をするかについてのヒントを与えるはずです。

結果として26ではなく0を取得する理由はstd::cin、入力からすべての非数値文字を解析するためです。結局のところ、 intであり、16進数の一部としてx認識されません。0x入力があった場合も同じ動作をします9x2(結果は単純になります9)。

于 2012-11-02T13:55:56.357 に答える
1

コードは次のようになります。

int x;
cin >> hex >> x;

デフォルトでcinは、読み込まれる数値はすべて10進数であると想定されます。明らかに、0x1aは有効な小数ではないため、変換を実行できません。これを機能させるには、10進数ではなく16進数からの数値変換を期待するように求めるストリーム修飾子 を使用する必要があります。hexcin

この0x場合、プレフィックスはオプションであるため、入力10は10進数の16として読み取られて格納されます。

于 2012-11-02T13:55:35.540 に答える