2015-08-24 300 views
-1

有沒有其他的方法可以在c語言中使用printf("%10d")來左對齊地打印名字和右對齊的文件中的數字?左右對齊

+0

是。轉換爲字符串,查看有多少空間丟失,並自己填寫。不知道爲什麼你會這樣做。 – Amadan

+8

你能解釋一下爲什麼你不想使用這種方法嗎?這對於提供替代建議可能是有用的/必需的。如果可能的話,請給出具體的測試例子。 – hoijui

+3

你能顯示一個輸入和預期的輸出場景嗎? –

回答

0

這個怎麼樣?

void print_uint32_right_justify(uint32_t num, int width) {   
    char b[width + 2]; 
    char *p = b + width + 1; 
    *(p--) = 0; 
    if(!num) 
    *(p--) = '0'; 
    while(num > 0) { 
    *(p--) = '0' + num % 10; 
    num /= 10; 
    } 
    while(p > b) 
    *(p--) = ' '; 
    write(1, b + 1, width); 
} 
+0

也應該檢查溢出,但你明白了...... – berendi

+0

也應該檢查負數。 –

+0

我不這麼認爲,因爲這是一個uint32_t :) – berendi

0

您還可以使用的printf*寬度說明。

const int length = 20; 
char aligned_left[length]; 
char aligned_right[length]; 

char *text = "text"; 

int padding_count = length - strnlen(text, length) - 1; 

snprintf(aligned_right, length, "%*s%s", padding_count, "", text); 
snprintf(aligned_left, length, "%s%*s", text, padding_count, ""); 

如果你想整數,你可以通過%d更換%s(但你必須計算適當的整數的長度)或snprintf整型什麼我叫char *text這裏。

Run on ideone