在 C++ 中使用带有十六进制十进制和八进制数的 unsetf

Ami*_*oli 3 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);
Run Code Online (Sandbox Code Playgroud)

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

我不明白and的最后两个unsetf命令。如果我只使用with ,我会得到正确的输入,我的意思是输入和接收.hexoctunsetfdec0x1a26

那么使用unsetffor hexand 有dec什么意义呢?

YSC*_*YSC 5

我不明白 hex 和 oct 的最后两个 unsetf 命令

如果hexoct标志没有被预先设定的,是你重置dec是足够了:

std::cin.unsetf(std::ios::dec);
int n;
std::cin >> n;  // 0x1a
std::cout << n; // 26
Run Code Online (Sandbox Code Playgroud)

演示

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

std::cin.unsetf(std::ios::dec);    
int n;
std::cin >> n;  // 0x1a
std::cout << n; // 0
Run Code Online (Sandbox Code Playgroud)

演示

所以,如果你想std::cin通过猜测它们的基数来解析你的数字,你应该unsetf hex,dec oct