大家好,欢迎来到IT知识分享网。
前言:
作为一名C语言蒟蒻,我自己曾经忽略了’\t’的作用,特作此文,警戒自己不要忽略小的知识点,文中结合了部分自己的思考,仅供参考!
引例:
请设计一个程序打印如下乘法表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
这个题目看似简单,事实上很容易写出问题。
错误示范:
#include<stdio.h> int main() { for(int i = 1; i < 10; i++) { for(int j = 1;j <= i; j++) { printf("%d*%d=%d ", j, i, i * j); } printf("\n"); } return 0; }
结果(不包括选框和文字框,编译器为Dev-C++6.7.5下同):
发现对齐有问题,尝试更改输出语句。
printf("%d*%d=%2d ", j, i, i * j);
结果:
对齐格式依旧不对。
正确写法:
#include<stdio.h> int main() { for(int i = 1; i < 10; i++) { for(int j = 1;j <= i; j++) { printf("%d*%d=%d\t", j, i, i * j); } printf("\n"); } return 0; }
结果:
成功对齐!
习题参考:
NCCL/Unit-1/Lesson-6.md at master · limingth/NCCL (github.com)
‘\t’作用说明:
可以参考:
水平制表符 \t 和 垂直制表符\v的区别-CSDN博客
这里解释一下最后一句(事实上这句话不严谨,对八个以上字符有理解歧义):
每8个字符可以看作一个水平制表符,如果遇到 \t 之前未满8个字符 则 \t 就补空格直到满8个
我们通过三个实验进一步阐释:
#include<stdio.h> int main() { printf("实验1:\n"); printf("\t#\n"); printf("#\n"); printf("实验2:\n"); printf("\t#\n"); printf("#\n"); printf("实验3:\n"); printf("\t#\n"); printf("45678#\n"); printf("实验4:\n"); printf("4567\t#\n"); printf("45678#\n"); return 0; }
输出结果(分为两行,第一行为实验组,第二行为对照组):
结论分析:
实验1:说明单独一个’\t’占据8个字符。
实验2,4:如果’\t’前面字符数目对8取模不为0,则用最少数目的空格补至字符数对8取模为0。
实验3:’\t’至少补1个空格。
尾结:
学习路上不要轻视小的知识点,学无止境,气有浩然。
写于2024.1.25
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/123196.html