我有一个关于使用unsetf. 以下是为格式化数字获取正确输入的答案。
实际上,您可以强制
operator>>获取并正确解释前缀0和0x. 您所要做的就是删除以下的默认设置std::cin:Run Code Online (Sandbox Code Playgroud)std::cin.unsetf(std::ios::dec); std::cin.unsetf(std::ios::hex); std::cin.unsetf(std::ios::oct);现在,当您输入时,
0x1a您将收到26.
我不明白and的最后两个unsetf命令。如果我只使用with ,我会得到正确的输入,我的意思是输入和接收.hexoctunsetfdec0x1a26
那么使用unsetffor hexand 有dec什么意义呢?
我不明白 hex 和 oct 的最后两个 unsetf 命令
如果在hex和oct标志没有被预先设定的,是你重置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。