我有以下代码重复printf显示整数
int x = 1;
for (x; x<=4; x++)
printf("%0*d\n",x,0);
它输出
0
00
000
0000
如何使输出去
1
22
333
4444
我已经试过:
printf("%x*d\n",x,0);
和
printf("%" + x + "*d\n",x,0);
,但它不工作。如果可能,我只想使用一个for循环。
我有以下代码重复printf显示整数
int x = 1;
for (x; x<=4; x++)
printf("%0*d\n",x,0);
它输出
0
00
000
0000
如何使输出去
1
22
333
4444
我已经试过:
printf("%x*d\n",x,0);
和
printf("%" + x + "*d\n",x,0);
,但它不工作。如果可能,我只想使用一个for循环。
你必须实际打印x
x
时间:
for (int x = 1; x <= 4; ++x) {
for (int i = 0; i < x; ++i) {
printf("%d", x);
}
printf("\n");
}
或者,因为这是C++:
for (int x = 1; x <= 4; ++x) {
for (int i = 0; i < x; ++i) {
std::cout << x;
}
std::cout << '\n';
}
或者,你可以使用string
构造,使的多个副本相同字符(参考文献#2):
for (int x = 1; x <= 4; ++x) {
std::cout << std::string(x, x + '0') << '\n';
}
如果可能,我只想使用1 for循环 –
@EmanSantos您可以使用'string'来查看更新。 – Barry
如果您能够使用C++流,则可以使用fill
方法设置填充字符,并使用<iomanip>
中的setw
修饰符设置下一个输出操作的填充。
for(int x = 1 ; x <= 4; x++)
{
char prev = std::cout.fill(x + '0');
std::cout << std::setw(x) << x << std::endl;
std::cout.fill(prev);
}
请注意,这只适用于9以下的数字,我认为这对你来说不是问题。
为什么不只是['std :: setfill'](http://en.cppreference.com/w/cpp/io/manip/setfill)? – Barry
@Barry我使用了这个方法,因为它返回前面的填充字符,以便我能够稍后恢复它。 – thelink2012
你应该阅读关于'printf'格式字符串的教程......以及一般的C++。你试图混合很多东西,在C++中不会像你期望的那样工作。 – luk32