c++流与print()填充符的区别



我已经有一段时间没有在StackOverflow上发布任何问题了;我希望我或多或少还记得回答问题的适当方法(提前道歉)。

我正在玩c++流和FMT库,它提供了c++ 23打印的预览。当设置填充符以完成整数的显示宽度时,流是冷的。例子:
const int y = 730;
cout << "y = " << setw(5) << y << endl;
cout << "y = " << setfill('0') << setw(5) << y << endl;
cout << "y = " << setfill('X') << setw(5) << y << endl;
cout << "y = " << setfill('*') << setw(5) << y << endl;

输出为

y =   730
y = 00730
y = XX730
y = **730

我试图使用fmt::print设置相同的填充符(包括'X'和'*'字符)-类似于:

print("y = {:5d}n", y);
print("y = {:05d}n", y);

嗯,我没有包括'X'和'*'。我并不是说用随机字符作为填充物是个好主意;我只是好奇,因为我需要向学生解释这些命令之间的区别。

提前感谢。维维安

手册显示了整数格式说明符的以下语法:

format_spec ::=  [[fill]align][sign]["#"]["0"][width]["." precision]["L"][type]
fill        ::=  <a character other than '{' or '}'>
align       ::=  "<" | ">" | "^"

这里format_spec{:}里面的部分。

所以指定自定义填充符(fill)也需要指定对齐方式(您想要>,即向右对齐):

fmt::print("y = {:X>5d}n", y); // XX730
fmt::print("y = {:*>5d}n", y); // **730

当给定填充字符时,对齐是强制性的。

print("y = {:*>5}n", y); 

最新更新