2015-05-10 18 views
0

我有以下代码重复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循环。

+0

你应该阅读关于'printf'格式字符串的教程......以及一般的C++。你试图混合很多东西,在C++中不会像你期望的那样工作。 – luk32

回答

2

你必须实际打印xx时间:

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'; 
} 
+0

如果可能,我只想使用1 for循环 –

+0

@EmanSantos您可以使用'string'来查看更新。 – Barry

7

如果您能够使用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以下的数字,我认为这对你来说不是问题。

+0

为什么不只是['std :: setfill'](http://en.cppreference.com/w/cpp/io/manip/setfill)? – Barry

+0

@Barry我使用了这个方法,因为它返回前面的填充字符,以便我能够稍后恢复它。 – thelink2012