目录
快速答案
使用星号占位符(*)
printf("%*d", -4, "12"); // 或 printf("%-*d", 4, "12"); // 得到的输出:"12 " (12后面有两个空格)
详细讲解
举个例子
通常,我们为了保证输出格式美观,会使用下面的方式输出
#include <stdio.h> #define MAX_STR_NUM 3 #define MAX_STR_LEN 7 int main() { char s[MAX_STR_NUM][MAX_STR_LEN] = {"Vi", "Jinx", "Yasuo"}; printf("Cham1 Cham2 Cham3\n"); printf("%-7s %-7s %-7s\n", s[0], s[1], s[2]); return 0; } // 得到的输出: // Cham1 Cham2 Cham3 // Vi Jinx Yasuo
但是,当我们需要使用更长的字符串时,在修改了MAX_STR_LEN
之后,还需要手动将printf
里,%-7s
的7
分别修改。
这就丧失了代码的一致性 (Consistency)
。
那么,能不能在双引号里使用宏定义常量
,来指定格式化后字符串的长度呢?
方法 及 代码
这里,我们使用C语言的星号(*)占位符
。
printf("%*s", 3, "ab"); // printf("%*s", 宽度, 变量值); // 得到的输出:"ab " printf("%*d", -4, "12"); // 或 printf("%-*d", 4, "12"); // 得到的输出:"12 " (12后面有两个空格)
首先,我们将列的标题也放进字符串数组中,然后和数据一起使用星号占位符
格式化输出。
这是改进后的代码
#include <stdio.h> #define MAX_STR_NUM 3 #define MAX_STR_LEN 7 int main() { char s[MAX_STR_NUM][MAX_STR_LEN] = {"Vi", "Jinx", "Yasuo"}; char headline[MAX_STR_NUM][MAX_STR_LEN] = {"Cham1", "Cham2", "Cham3"}; printf("%-*s %-*s %-*s\n", MAX_STR_LEN, headline[0], MAX_STR_LEN, headline[1], MAX_STR_LEN, headline[2]); printf("%-*s %-*s %-*s\n", MAX_STR_LEN, s[0], MAX_STR_LEN, s[1], MAX_STR_LEN, s[2]); return 0; } // 得到的输出: // Cham1 Cham2 Cham3 // Vi Jinx Yasuo
这时,只用改变MAX_STR_LEN
的值,就能得到整齐的输出了。
#define MAX_STR_LEN 7 // 得到的输出: // Cham1 Cham2 Cham3 // Vi Jinx Yasuo #define MAX_STR_LEN 10 // 得到的输出: // Cham1 Cham2 Cham3 // Vi Jinx Yasuo
参考资料
C语言 宏定义 如何插入到 printf中的双引号里面去?- 百度知道
标签:%-,12,定义,双引号,MAX,LEN,C语言,STR,printf From: https://www.cnblogs.com/peifx/p/17599661.html