【发布时间】:2011-02-23 03:18:31
【问题描述】:
我想列出从 0000 到 9999 的所有数字,但是我无法保持零位。
我试过了:
for(int i = 0; i <= 9999; ++i)
{
cout << i << "\n";
}
但我得到:1,2,3,4..ect 我怎样才能使它成为0001,0002,0003....0010等
【问题讨论】:
标签: c++ numbers generator string-formatting
我想列出从 0000 到 9999 的所有数字,但是我无法保持零位。
我试过了:
for(int i = 0; i <= 9999; ++i)
{
cout << i << "\n";
}
但我得到:1,2,3,4..ect 我怎样才能使它成为0001,0002,0003....0010等
【问题讨论】:
标签: c++ numbers generator string-formatting
【讨论】:
std::endl() 是一个函数,其作用是返回一个换行符并刷新流。您可能希望也可能不希望刷新流。在大多数情况下,我们并不真正关心那个级别的事情,我们会在两者之间任意选择。但是如果我们不刷新,即如果我们使用'\n' 而不是std::endl,那么事情可能会更快一些。这是因为我们写入流的缓冲区而不是输出设备。通过写入缓冲区,我们延迟了写入输出设备。与写入内存中的缓冲区相比,写入 IO 设备的成本通常很高。
\n。
你只需要设置一些标志:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
cout << setfill('0');
for(int i = 999; i >= 0; --i)
{
cout << setw(4) << i << "\n";
}
return 0;
}
【讨论】:
使用ios_base::width() 和ios::fill():
cout.width(5);
cout.fill('0');
cout << i << endl;
或者,使用 IO 操纵器:
#include<iomanip>
// ...
cout << setw(5) << setfill('0') << i << endl;
【讨论】:
虽然不是必需的,但如果你想知道如何用 C 来做到这一点,这里有一个例子:
for (int i = 0; i <= 9999; i++)
printf("%04d\n", i);
在这里,“%04d”中的“0”的作用类似于setfill('0'),而“4”的作用类似于setw(4)。
【讨论】: