2009-02-10 103 views
44

如何在C++中格式化我的输出?换句话说,什么是C++相当于使用printf这样的:用C++输出运算符打印前导零(相当于printf)?

printf("%05d", zipCode); 

我知道我可以只在C++中使用printf,但我宁愿输出操作<<

您只需使用以下内容?

std::cout << "ZIP code: " << sprintf("%05d", zipCode) << std::endl; 

回答

69

这将这样的伎俩:

#include <iostream> 
#include <iomanip> 

using namespace std; 
cout << setw(5) << setfill('0') << zipCode << endl; 

// or use this if you don't like 'using namespace std;' 
std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl; 

控制填充最常用的IO操纵器:

  • std::setw(width)套t的宽度他领域。
  • std::setfill(fillchar)设置填充字符。
  • std::setiosflags(align)设置对齐,其中align是ios :: left或ios :: right。
7

使用setw and setfill电话:

std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl; 
+0

重新激活,+ 1'ed因为它显示了如何在任何名称空间中执行它(还添加了setfill,sqook,希望你不要m IND)。 – paxdiablo 2009-02-10 02:21:19

+0

够公平的。 “使用名称空间标准;”肯定是邪恶的。 ;) – 2009-02-10 02:29:02

+0

我认为这个答案应该提到,不同于`std :: setw`的设置,`std :: setfill`的设置将在执行输出后粘住,换句话说就是`std :: cout`将被永久更改(直到被另一个`std :: setfill`修改)。由于这不太可取,最好保存并恢复以前的填充字符。 – 2017-05-18 07:18:56

0

,或者

char t[32]; 
sprintf_s(t, "%05d", 1); 

将输出00001作为OP已经想做