2015-08-24 233 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