jam*_*ieQ 232 c++ formatting cout
我想cout输出一个带前导零的int,因此值1将打印为001,值25打印为025.我怎样才能做到这一点?
Ara*_*raK 346
首先包括setfill,然后:
#include <iomanip>
#include <iostream>
int main()
{
std::cout << std::setfill('0') << std::setw(5) << 25;
}
Run Code Online (Sandbox Code Playgroud)
' 'setw默认设置为.setfill设置要打印的字段的宽度,就是这样.
如果您有兴趣知道如何格式化输出流一般,我写了另一个问题的答案,希望它是有用的: 格式化C++控制台输出.
sha*_*wat 40
实现此目的的另一种方法是使用printf()C语言的旧函数
你可以像这样使用它
int dd = 1, mm = 9, yy = 1;
printf("%02d - %02d - %04d", mm, dd, yy);
Run Code Online (Sandbox Code Playgroud)
这将09 - 01 - 0001在控制台上打印.
您还可以使用另一个函数sprintf()将格式化输出写入字符串,如下所示:
int dd = 1, mm = 9, yy = 1;
char s[25];
sprintf(s, "%02d - %02d - %04d", mm, dd, yy);
cout << s;
Run Code Online (Sandbox Code Playgroud)
不要忘记stdio.h在程序中包含头文件以用于这两个函数
您可以用0或其他字符(不是数字)填充空格.
如果您确实写了%24d格式说明符之类的内容,则不会填写2空格.这将设置填充24并将填充空格.
小智 30
cout.fill('*');
cout << -12345 << endl; // print default value with no field width
cout << setw(10) << -12345 << endl; // print default with field width
cout << setw(10) << left << -12345 << endl; // print left justified
cout << setw(10) << right << -12345 << endl; // print right justified
cout << setw(10) << internal << -12345 << endl; // print internally justified
Run Code Online (Sandbox Code Playgroud)
这会产生输出:
-12345
****-12345
-12345****
****-12345
-****12345
Run Code Online (Sandbox Code Playgroud)
lyr*_*cat 17
cout.fill( '0' );
cout.width( 3 );
cout << value;
Run Code Online (Sandbox Code Playgroud)
vit*_*aut 14
在 C++20 中,您将能够执行以下操作:
std::cout << std::format("{:03}", 25); // prints 025
Run Code Online (Sandbox Code Playgroud)
在此期间,您可以使用的{} FMT库,std::format是基于。
免责声明:我是 {fmt} 和 C++20 的作者std::format。