C语言中如何使用printf实现输出内容左对齐与居中对齐
printf 对齐效果实现方法
左对齐
printf 原生就支持左对齐配置,只需要在宽度参数前加-标识即可:你代码里写的%25s、%25d是默认的右对齐规则,占满25个字符宽度、内容靠右侧放;改成%-25s、%-25d之后,就会变成内容靠左侧放、空格补在右侧,完全匹配你要的左对齐效果。
直接替换你代码里的输出段即可:
printf("=======================================\n"); printf("= tes s : %-25s =\n",tes); printf("= tes int : %-25d =\n",tesint); printf("= tes 1 : %-25s =\n",tes1); printf("= tes 2 : %-25s =\n",tes2); printf("=======================================\n");
改完运行后边框会自动对齐,不需要手动敲空格或者制表符。
居中对齐
C标准库的printf没有提供原生的居中对齐格式符,需要手动计算两侧补的空格数实现,逻辑非常简单:
- 先拿到待输出内容的实际长度:字符串直接调用
strlen获取即可,数字可以先用sprintf写到临时字符缓冲区,再按字符串计算长度 - 用预留的总宽度减去内容长度,得到总共需要补的空格数量
- 总空格数除以2得到左侧要补的空格数,剩下的空格全部补在右侧
针对你代码里25字符的固定宽度,举个字符串居中输出的实现例子:
#include <string.h> // 记得引入对应头文件 int len = strlen(tes); int left_space = (25 - len) / 2; int right_space = 25 - len - left_space; // %*s会从参数中读取宽度值,传入空字符串时就会输出对应数量的空格 printf("= tes s : %*s%s%*s =\n", left_space, "", tes, right_space, "");
如果总空格数是奇数,多出来的1个空格会默认补在右侧;如果想让多的空格补在左侧,把左侧空格的计算逻辑改成int left_space = (25 - len + 1) / 2;就行。数字的居中逻辑完全一致,先转成字符串再按上面的方法计算填充即可。
额外提醒
你代码里的fflush(stdin)属于C标准定义的未定义行为:fflush本身是用来刷新输出流缓冲区的,作用在输入流上的效果只有少数编译器(比如旧版本VC)支持,跨环境编译很容易出现输入异常。要清空输入缓冲区残留的换行符,建议用循环逐字符读走剩余内容的方式实现,兼容性更好。
内容的提问来源于stack exchange,提问作者LearnerC
相关产品推荐
相关产品推荐

