我有以下代碼重複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