2013-03-13 69 views
1

我將C代碼連接到應該打印到屏幕上的代碼(使用printf())乘法表,其中右下角(表格的最大乘積)作爲MaxMult傳遞給函數。生成一個可變長度的空白字符數組

例如用於MaxMult = 4應該打印:

1 2 3 4 

    2 4 6 8 

    3 6 9 12 

    4 8 12 16 

的要求是,該表將被靠右對齊,而這就是我的問題:

每個號碼,號碼左邊的白色空間是不同的。 ,因爲我需要它遵循MaxMult左側只有1個空白區域的要求,其他所有內容都參照它。

起初我想也許我可以傳遞一個變量給printf。像這樣:

printf("% Num_Of_Wite_Space d", currNum) 

但我似乎無法做到這一點。

所以現在我需要一種方法來根據每個數字的位數生成一個不同長度的空白字符串,以便將IT傳遞給printf。 (希望我很清楚..)

有沒有人可以告訴我如何做到這一點?

回答

2

最簡單的方法是對每個值使用固定的字段寬度,例如,

printf("%3d", a[i][j]); 

這將導致每個輸出值與前導空格在必要時,得到的3場的寬度,例如被填充

1 2 3 4 

2 4 6 8 

3 6 9 12 

4 8 12 16 

顯然,如果您需要使用兩位以上的數字打印值,則應相應地增加字段寬度。

如果需要,將在運行時來決定,而不是固定在編譯時你可以使用一個字段寬度:

printf("%*d", field_width, a[i][j]); 

進一步詳情,請參閱man printf

+0

這不會對情況下工作時的最終(右下角)值大於2位數。 – unwind 2013-03-13 15:04:41

+0

@unwind:true - 它僅僅是這個特例的一個說明性示例 - 我已經更新了答案,但它涵蓋了在運行時指定的不同字段寬度和字段寬度,而不是編譯時。 – 2013-03-13 15:08:47

3

是這樣的:

printf("% Num_Of_Wite_Space d", currNum)

,但我不能似乎能夠做到這一點。

當然,你可以做到這一點。語法是:

printf("%*d", fieldWidth, currNum); 

請注意,fieldWidth是(空格+數字)的總寬度。

+0

謝謝保羅!我已經糾正了答案。 – 2013-03-13 15:37:38

0

這不是太困難:

int width = 10; //< number of chars in one column 
printf("%*d", width, a[i][j]); 

可以設置列寬固定,或從陣列使用某些計算值:

int width[COLS]; 
int a[ROWS][COLS]; 
int row, col; 

... // fill in a and width 

for (row = 0; row < ROWS; ++row) 
{ 
    for (col = 0; col < COLS; ++col) 
    { 
     printf("%*d", width[col], a[row][col]); 
    } 
    printf("\n"); 
} 
相關問題