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

using unsetf with hex dec and octal numbers in C++

本文关键字:十进制 八进制数 unsetf 十六进制 C++      更新时间:2023-10-16

我有一个关于使用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

我不明白hexoct的最后两个unsetf命令.如果我仅将unsetfdec一起使用,我会得到正确的输入,我的意思是输入0x1a并接收26

那么使用unsetf进行hexdec有什么意义呢?

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

如果以前未设置hexoct标志,是的,取消设置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通过猜测它们的基数来解析你的数字,你应该unsetfhexdecoct