关于C语言中制表符 异常表现的原因咨询
制表符\t的行为解释
先看你的代码:
#include<stdio.h> main(){ printf("Fahrenheit\tCelsius\n"); printf("Celsius\tFahrenheit\n"); }
实际输出:
Fahrenheit Celsius Celsius Fahrenheit
问题出在终端的制表位规则上:终端里的制表符\t不是固定插入固定数量的空格,而是会跳转到下一个预设的制表位——绝大多数终端的制表位间隔是8个字符,也就是位置0、8、16、24……这些固定位置。
咱们逐行拆解:
- 第一行的
Fahrenheit是10个字符,已经超过了第8位的制表位,所以\t会直接跳到下一个制表位(第16位)。16-10=6,所以Fahrenheit和Celsius之间会有6个空格,和你看到的第一行输出一致。 - 第二行的
Celsius是7个字符,还没到第8位的制表位,所以\t只需要跳1个空格就到第8位,这就导致Celsius和Fahrenheit之间只有1个空格,出现了你看到的结果。
如果想让两行对齐,有两种简单办法:
- 不用制表符,手动补对应数量的空格,比如写成
printf("Celsius Fahrenheit\n");(补6个空格) - 用格式化输出固定宽度,比如
printf("%-16s%s\n", "Fahrenheit", "Celsius");和printf("%-16s%s\n", "Celsius", "Fahrenheit");,强制让第一个字符串占16个字符宽度,后面的内容自然对齐。
内容的提问来源于stack exchange,提问作者Louneil Maglasang
相关产品推荐
相关产品推荐

