2017-05-30 41 views
0

在C中有推荐的方式来选择我的输出,以便它实际上与数据对齐吗?我目前正在使用下面可以查看的转义序列\ t。有没有一种推荐的方式来将标题与C中的数据输出对齐?

#include <stdio.h> 

int main() 
{ 

    int i; 
    int meatBalls[5] = {1, 2, 3, 4, 5}; 

    printf("\tElement \t Address \t Value \n"); 

    for(i=0; i < 5; i++) { 
     printf("meatBalls[%d] \t %p \t %d \n", i, &meatBalls[i], meatBalls[i]); 
    } 


    return 0; 
} 

这是我的电流输出,正如你所看到的标题不对齐在正确的方向

Element  Address  Value 
meatBalls[0]  0x7fff547d0640  1 
meatBalls[1]  0x7fff547d0644  2 
meatBalls[2]  0x7fff547d0648  3 
meatBalls[3]  0x7fff547d064c  4 
meatBalls[4]  0x7fff547d0650  5 
+1

您应该查看printf格式字符串中的对齐选项。像这样的东西可能会有所帮助:https://stackoverflow.com/questions/13548785/custom-string-alignment-using-printf-in-c –

+1

请注意,'%p'正在输出一个实现特定的字符串。所以你原则上不可能知道它的宽度。有趣的是,任何'%p'格式都是*特定实现* –

+0

请注意,您应该将参数转换为%p到'void *'](https://stackoverflow.com/questions/24867814/printfp-and-casting-to -void),或者行为未定义。 –

回答

3

步骤:

#include <stdio.h> 

int main(void) 
{ 
    int i; 
    int meatBalls[5] = {1, 2, 3, 4, 5}; 

    printf("%12s %18s %6s\n", "Element", "Address", "Value"); 

    for(i=0; i < 5; i++) { 
     printf("meatBalls[%d] \t %p \t %d \n", i, &meatBalls[i], meatBalls[i]); 
    } 

    return 0; 
} 

输出

 Element   Address Value 
meatBalls[0]  0x7fff60a1f700  1 
meatBalls[1]  0x7fff60a1f704  2 
meatBalls[2]  0x7fff60a1f708  3 
meatBalls[3]  0x7fff60a1f70c  4 
meatBalls[4]  0x7fff60a1f710  5 
+0

它的工作原理,但没有保证。 '%p'是特定于实现的。可能无法工作,例如在32位ARM上的方式与在64位Linux/x86-64上的方式相同。 –

+0

感谢大家的反馈。使用上面的内容并更新我的printf以包含“%12s%18s%6s”在我的机器上看起来足够了。 OS X 10.11.6使用CLion IDE。但是,我将继续研究printf语句所提供的所有内容。 – Wunderbread

1

最简单的方法可能是只是更好地使用的“printf”来设置字段宽度......也许是这样的:

#include <stdio.h> 

int main() { 
    int i; 
    int meatBalls[] = {1, 2, 3, 4, 5}; 

       /-- 12 characters in "Element": 9 in "meatBalls", plus 3 in the subscript ("[#]") 
       |  /-- 14 characters in an address 
       |  | /-- unimportant, since @ end of line 
    printf("%-12s %-14s %s\n", "Element", "Address", "Value"); 
    for(i=0; i < 5; i++) { 
     printf("meatBalls[%1d] %14p %d\n", i, &meatBalls[i], meatBalls[i]); 
    } 
    return 0; 
} 

注意,你可能与指针格式播放,因为指针平台-dependent

相关问题