在 C 语言中的 printf 函数中对齐列

Jinku Hu 2023年10月12日 C C IO
  1. 使用%{integer}d 符号来对齐 C 语言中的输出
  2. 使用%*d 符号来对齐 C 语言中的输出项
  3. 使用%*d%{int}d 符号来对齐表中的列
在 C 语言中的 printf 函数中对齐列

本文将演示关于如何在 C 语言的 printf 函数中对齐列的多种方法。

使用%{integer}d 符号来对齐 C 语言中的输出

printf 是标准 I/O 库的一部分,可以利用它将格式化的字符串输出到 stdout 流。stdout 流是有缓冲的;因此,如果字符串不包括换行符,可能会有延迟。通常,给定的字符串不会被打印,直到内部缓冲区没有被填满;只有在这之后,内容才会被写入 stdout 流。

printf 使用以%字符开头的格式指定符来控制字符串的格式。除了内置数据类型的不同指定符外,一些符号还可以添加各种功能,如对齐和填充。在这种情况下,我们在%和格式指定符字符之间插入给定的整数,以表示输出项左侧要填充的空格数。因此,我们可以在多行输出中包含相同的数字,以使条目向右对齐。

#include <stdio.h> #include <stdlib.h>  int main(int argc, char const *argv[]) {  int mm1 = 11011;  int mm2 = 111;  int mm3 = 11;   printf("%10d %d\n", mm1, mm1);  printf("%10d %d\n", mm2, mm2);  printf("%10d %d\n", mm3, mm3);   exit(EXIT_SUCCESS); } 

输出:

11011 11011  111 111  11 11 

使用%*d 符号来对齐 C 语言中的输出项

另外,使用%*d 符号也可以实现同样的格式化,它还要求提供整数,因为数据参数是在逗号之后。但请注意,如果多个格式指定符包括%字符,它们都需要在相应的参数前包括一个单独的整数值。

#include <stdio.h> #include <stdlib.h>  int main(int argc, char const *argv[]) {  int mm1 = 11011;  int mm2 = 111;  int mm3 = 11;   printf("%*d %d\n", 10, mm1, mm1);  printf("%*d %d\n", 10, mm2, mm2);  printf("%*d %d\n\n", 10, mm3, mm3);   exit(EXIT_SUCCESS); } 

输出:

11011 11011  111 111  11 11 

使用%*d%{int}d 符号来对齐表中的列

最后,我们可以在不同的情况下结合这两种方法,在任何文本表输出中对列进行对齐。注意,有时需要将列项向左对齐。我们可以通过在格式指定符之间插入负整数值或者用%*d 符号作为参数传递来实现。当填充不为常量且可以在运行时动态计算时,后一种解决方案更为合适。

#include <stdio.h> #include <stdlib.h>  #ifndef MAX #define MAX 10 #endif  int main(int argc, char const *argv[]) {  char *row1[] = {"num", "name", "sum"};  int col1[] = {1, 2, 3};  char *col2[] = {"one", "two", "three"};  int col3[] = {1243, 14234, 3324};   printf("%*s | %*s | %*s\n", -3, row1[0], -MAX, row1[1], MAX, row1[2]);  printf("%*c | %*c | %*c\n", -3, '-', -MAX, '-', MAX, '-');  size_t len = sizeof col1 / sizeof col1[0];  for (int i = 0; i < len; ++i) {  printf("%-3d | %-10s | %10d\n", col1[i], col2[i], col3[i]);  }   exit(EXIT_SUCCESS); } 

输出:

num | name | sum - | - | - 1 | one | 1243 2 | two | 14234 3 | three | 3324 
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - C IO