использование unsetf с шестнадцатеричным dec и восьмеричным числом в C ++ - PullRequest
0 голосов
/ 05 сентября 2018

У меня вопрос по поводу использования unsetf. Ниже приведен ответ для получения правильного ввода для форматированных чисел.

На самом деле, вы можете заставить operator>> получить и правильно интерпретировать префиксы 0 и 0x. Все, что вам нужно сделать, это удалить настройки по умолчанию для std::cin:

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

Теперь, когда вы введете 0x1a, вы получите 26.

Я не понимаю последние две unsetf команды для hex и oct. Если я использую unsetf только с dec, я получу правильный ввод, который я имею в виду, введя 0x1a и получив 26.

Так какой смысл использовать unsetf для hex и dec?

1 Ответ

0 голосов
/ 05 сентября 2018

Я не понимаю две последние команды unsetf для hex и oct

Если флаги hex и oct не были установлены ранее, да сброса dec достаточно:

std::cin.unsetf(std::ios::dec);
int n;
std::cin >> n;  // 0x1a
std::cout << n; // 26

( демо )

Но , если эти флаги были установлены ранее, они могут повлиять на анализ ваших шестнадцатеричных чисел:

std::cin.unsetf(std::ios::dec);    
int n;
std::cin >> n;  // 0x1a
std::cout << n; // 0

( демо )

Итак, если вы хотите, чтобы std::cin проанализировал ваш номер, угадав их базу, вам следует unsetf hex, dec и oct.

...