为何std::cout输出八进制数时开头不带前导0?
问题解答
首先要明确两个不同的规则:
- 代码中的八进制字面量需要加前导
0,这是C++语法对字面量的规定(比如写int i = 010;时,010才是八进制的8) - 输出流的八进制转换:
std::oct操纵符的作用仅仅是让输出流把整数的值转换成八进制数字串输出,并不会自动添加前导0
你的代码里变量i是十进制的8,通过std::oct输出时,会被转换成八进制的数字表示10,这完全符合C++标准的行为。如果想要输出带前导0的格式,需要手动处理,比如两种常见方式:
方式1:手动拼接前导0
#include <iostream> int main() { int i = 8; std::cout << "0" << std::oct << i; }
方式2:用格式化工具实现固定宽度的前导0
需要包含<iomanip>头文件来使用setfill和setw:
#include <iostream> #include <iomanip> int main() { int i = 8; // 设置填充字符为0,输出宽度为3,不足的位置用0填充 std::cout << std::setfill('0') << std::setw(3) << std::oct << i; }
两种方式都会输出010,第二种更适合需要固定位数的场景。
内容的提问来源于stack exchange,提问作者João Ferrão
相关产品推荐
相关产品推荐

