printf多列对齐(格式化输出的高级应用)

1字符串对齐1.1列左对齐1.2. 右对齐

2数字对齐

1字符串对齐

1.1列左对齐

printf("%-*s", 20, string); 表示输出字符串左对齐输出20,如果字符串不够20个,以空格补齐。 -表示左对齐。

例:

struct help_struct

{

char *option_name;

char *option_value;

char *option_ext;

};

struct help_struct options[] =

{

{"set_node_id", "node_id", "set the node id"},

{"set_debug_level", "debug_level", "4:DEBUG 3:INFO 2:WARNING 1:ERR 0:NESS"},

{"flush_pool", "pool_name", ""},

{"get_lu_count", "", ""},

{"check_pools", "pool_name", ""},

{"invalid_pool", "pool_name", ""},

{"set_mirror", "mirror_state", "0:disable 1:enable"},

{(char*)NULL, (char*)NULL, (char*)NULL}

};

static void show_usage(const char *execname)

{

struct help_struct *opt = NULL;

printf("Usage: %s [options] ...\n", execname);

printf("Options:\n");

for(opt = options; opt->option_name; opt++)

{

printf(" --");

printf("%-*s",25, opt->option_name);

printf("%-*s",20, opt->option_value);

printf("%-*s",50, opt->option_ext);

printf("\n");

}

}

show_usage输出结果为: Usage: ./vicm_test [options] … Options: –set_node_id node_id set the node id –set_debug_level debug_level 4:DEBUG 3:INFO 2:WARNING 1:ERR 0:NESS –flush_pool pool_name –get_lu_count –check_pools pool_name –invalid_pool pool_name –set_mirror mirror_state 0:disable 1:enable

1.2. 右对齐

printf("%*s", 20, string); 表示输出字符串右对齐输出20,如果字符串不够20个,以空格补齐。 没有-表示右对齐。

例:

static void show_usage(const char *execname)

{

struct help_struct *opt = NULL;

printf("Usage: %s [options] ...\n", execname);

printf("Options:\n");

for(opt = options; opt->option_name; opt++)

{

printf(" --");

printf("%*s",25, opt->option_name);

printf("%*s",20, opt->option_value);

printf("%*s",50, opt->option_ext);

printf("\n");

}

}

show_usage输出结果为: Usage: ./vicm_test [options] … Options:

– set_node_id node_id set the node id – set_debug_level debug_level 4:DEBUG 3:INFO 2:WARNING 1:ERR 0:NESS – flush_pool pool_name – get_lu_count – check_pools pool_name – invalid_pool pool_name – set_mirror mirror_state 0:disable 1:enable

2数字对齐

右对齐%numd(num是位数,比如按5位数的长度输出,num为正数则右对齐)

#include

int main()

{

printf("第%3d个数:%5d\n", 1, 2);

printf("第%3d个数:%5d\n", 10, 20);

printf("第%3d个数:%5d\n", 100, 200);

return 0;

}

左对齐%numd(num是位数,比如按5位数的长度输出,num为负数则左对齐)

#include

int main()

{

printf("第%-3d个数:%-5d\n", 1, 2);

printf("第%-3d个数:%-5d\n", 10, 20);

printf("第%-3d个数:%-5d\n", 100, 200);

return 0;

}

保留固定的小数位%m.nf(m是结果总位数,n是小数部分位数,按四舍五入保留)

#include

int main()

{

printf("第%4.1f个数:%.1f\n", 1.12345, 2.12345);

printf("第%4.2f个数:%.2f\n", 10.12345, 20.12345);

printf("第%4.3f个数:%.3f\n", 100.12345, 200.12345);

return 0;

}

2025-09-27 21:45:14