2015-05-10 69 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