在C ++中将unsetf与十六进制dec和八进制数一起使用

时间:2018-09-05 08:19:25

标签: c++ c++11 c++14

我对使用unsetf有疑问。以下是获取正确的格式化数字输入的答案。

  

实际上,您可以强制operator>>获取并正确解释   前缀00x。您要做的就是删除默认设置   为std::cin

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

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

我不了解unsetfhex的最后两个oct命令。如果仅将unsetfdec一起使用,则会得到正确的输入,这意味着输入0x1a并接收26

那么将unsetf用于hexdec有什么意义呢?

1 个答案:

答案 0 :(得分:4)

  

我不明白十六进制和八进制的最后两个unsetf命令

如果先前未设置hexoct标志,则可以将dec设为未设置就足够了:

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

demo

但是,如果先前已设置了这些标志,它们可能会影响您的十六进制数字的解析:

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

demo

因此,如果您想让std::cin通过猜测底数来解析数字,则应unsetf hexdec { {1}}。