快速答案
使用星号占位符(*)
printf("%*d", -4, "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;
}
但是,当我们需要使用更长的字符串时,在修改了MAX_STR_LEN 之后,还需要手动将printf 里,%-7s 的7 分别修改。
这就丧失了代码的一致性 (Consistency) 。
那么,能不能在双引号里使用宏定义常量 ,来指定格式化后字符串的长度呢?
方法 及 代码
这里,我们使用C语言的星号(*)占位符 。
printf("%*s", 3, "ab");
printf("%*d", -4, "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;
}
这时,只用改变MAX_STR_LEN 的值,就能得到整齐的输出了。
#define MAX_STR_LEN 7
#define MAX_STR_LEN 10
参考资料
C语言 宏定义 如何插入到 printf中的双引号里面去?- 百度知道
c语言中的星号(*)占位符
|