C语言的左对齐符号-

一.%-8s格式分解:

  • %s:这是基础占位符,告诉程序"这里要放一个字符串"
  • -:这个小小的减号是个左对齐魔法师,让文字乖乖靠在左侧排列,就像学生们在操场上向左看齐
  • 8:这是个空间规划师,确保每个数据都占据8个字符的宽度,不多不少

实际效果举例:如果输出"教学楼",原本长度是6个字符,使用%-8s后会变成:

cpp 复制代码
教学楼  

后面自动补充2个空格,凑满8位。这就好比在课程表上,每个课程名称都占据相同的格子大小,整整齐齐。

为什么要这样做?

在距离矩阵中,有些地点名称长(如"第三实验楼"),有些短(如"食堂")。如果没有统一宽度,输出会像歪歪扭扭的队伍:

cpp 复制代码
体育馆    25
图书馆      30
留学生公寓  35

而用了%-8s后,就像训练有素的方阵:

cpp 复制代码
体育馆    25
图书馆    30  
留学生公寓 35

二.-对齐符号的奇妙用法:

左对齐-几乎适用于所有常见的格式控制场景:

Ⅰ.字符串家族:

cpp 复制代码
%-8s   // 字符串左对齐

Ⅱ. 整数阵营:

cpp 复制代码
%-6d   // 十进制整数左对齐
%-5x   // 十六进制数左对齐  
%-4o   // 八进制数左对齐

Ⅲ.浮点数世界:

cpp 复制代码
%-10.2f  // 浮点数左对齐,保留2位小数
%-8.1e   // 科学计数法左对齐

Ⅳ.字符领域:

cpp 复制代码
%-3c     // 单个字符左对齐

Ⅴ.生动对比示例:假设我们要输出学生成绩表

cpp 复制代码
// 没有左对齐(默认右对齐)
printf("%8s: %3d分\n", "张三", 95);
printf("%8s: %3d分\n", "李四", 88);

// 输出效果:
//       张三:  95分
//       李四:  88分

// 使用左对齐
printf("%-8s: %-3d分\n", "张三", 95); 
printf("%-8s: %-3d分\n", "李四", 88);

// 输出效果:
// 张三    : 95 分
// 李四    : 88 分

Ⅵ.实用小贴士:

  • 在制作表格、对齐数据时,-就像一位细心的排版助手
  • 对于数字,左对齐可能让小数点位置不统一,需要根据实际情况选择

三.中文字符占位2个字节:

从字符编码和显示原理的角度详细解释:

Ⅰ.中文占位的秘密:

编码层面的真相:

  • 在GB2312/GBK中文编码中,每个汉字占用 2个字节
  • 但在终端显示时,一个汉字在等宽字体下通常占据 2个英文字符的宽度

Ⅱ.实际显示效果对比:

cpp 复制代码
// 让我们做个实验
printf("%-6s|\n", "教");    // "教     |"
printf("%-6s|\n", "教学");  // "教学   |"  
printf("%-6s|\n", "教学楼"); // "教学楼|"
printf("%-6s|\n", "abc");   // "abc   |"
printf("%-6s|\n", "abcdef"); // "abcdef|"

会发现:

  • "教" → 实际显示占用2字符宽度,补齐4个空格
  • "教学" → 占用4字符宽度,补齐2个空格
  • "教学楼" → 刚好占满6字符宽度,无需补空格

Ⅲ.背后的设计哲学:

这其实体现了计算机对多语言支持的智慧:

  • 英文字符:1字节存储,1字符宽度
  • 中文字符:2字节存储,2字符宽度
  • 这样保证了在表格、对齐显示时的视觉一致性

Ⅳ.举例:

cpp 复制代码
int len=strlen("教学楼");
printf("%d \n",len); //结果为6 

上述的例子中,要想得到"教学楼"的实际长度,就需要strlen("教学楼")/2,如下:

cpp 复制代码
int len=strlen("教学楼")/2;
printf("%d \n",len); //结果为3

相关推荐
Book思议-16 分钟前
【数据结构实战】判断链表是否有环:快慢指针法(Floyd 判圈算法)
c语言·数据结构·算法·链表
RFCEO17 分钟前
JavaScript基础课程十四、原型与原型链(JS 核心底层)
开发语言·原型模式·prototype原型详解·javascript基础课·构造函数原型方法定义与使用·js原型链继承机制入门·t原型链顶层null原理
liuyao_xianhui18 分钟前
优选算法_位运算_只出现一次的数字3_C++
开发语言·数据结构·c++·算法·leetcode·链表·动态规划
qq_1508419926 分钟前
用CVI写一个贪吃蛇小游戏
c语言
Sylvia33.34 分钟前
体育数据API实战:用火星数据实现NBA赛事实时比分与状态同步
java·linux·开发语言·前端·python
遗憾随她而去.42 分钟前
js 插件 Clipboard.js 与原生 Clipboard API 全方位对比
开发语言·前端·javascript
人道领域42 分钟前
Day | 07 【苍穹外卖 :用户端添加购物车】
java·开发语言·数据库·后端·苍穹外卖
@我漫长的孤独流浪1 小时前
Python爬虫实战:从入门到精通
开发语言·爬虫·python
weixin_456321641 小时前
Java架构设计:Redis RDB持久化深度解析(原理+实战+避坑)
java·开发语言·redis
C羊驼1 小时前
C 语言:哥德巴赫猜想
c语言·开发语言·人工智能·经验分享·笔记·算法·课程设计