我对使用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
有什么意义呢?
答案 0 :(得分:4)
我不明白十六进制和八进制的最后两个unsetf命令
如果先前未设置hex
和oct
标志,则可以将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
hex
,dec
和 { {1}}。