03 格式化输入/输出
A programming language is low level when its programs require attention to the irrelevant.1
码字不易,对你有帮助 **点赞👍/转发↪️/关注 👀 ** 支持一下作者
微信搜公众号:不会编程的程序圆
看更多干货,获取第一时间更新
请将本片与下一节《数据类型》 联系起来一起“食用”。
注:本教程含有超纲内容!!!如果你看不懂,不要丧失信心,可以“不求甚解”一些,关键是要多写代码!然后继续学习下面的内容!
🗺思维导图
✉️写在前面
如果只是写个人学习总结的博客很容易,简单写一些感悟然后贴上代码走人就可以了,甚至不用校审。但是我命名本系列为【C语言必知必会】帮助你从入门到精通 C语言,那势必要“事无巨细”一些:既要考虑到没有基础的初学者,又不能止于基础。所以本教程适合各类人群学习,只要你看就一定会有帮助。
本教程是本人纯手打并排版,校审由我与我的搭档汤圆君一起完成的。你们看这一篇文章我要写好几个小时。如果文章对你有帮助,请不要“白嫖”。支持一下作者,作者会发更多干货好文。
特别鸣谢:汤圆君(公众号:【Cc听香水榭】 长期更新高质量英语教学)关注她表示对她工作的认可吧!
▶️ 此符号表示该内容以后的章节会讲解,此章节内不要求理解。
🌐目录
文章目录
printf 函数
printf()
函数打印数据的指令要与待打印数据的类型相匹配。例如,打印整数时使用 %d
,打印字符时使用 %c
。这些符号被称为转换说明(conversion specification),它们指定了如何把数据(以2进制形式)转换成可显示的形式。
例如:
printf("I am %d years old", 18);
这是 printf()的格式:
printf(格式字符串,待打印项1,待打印项2,...);
待打印项都是要打印的的项。它们可以是变量,常量,甚至是在打印之前计算的表达式。上例中,只有一个待打印项: 18 。
格式字符串包含两种不同信息:
- 普通字符:以字符串中出现的形式打印出来。上例中,“I am” 与 " years old" 为普通字符
- 转换说明:用待打印项的值来替换。上例中,"%d" 为转换说明
⚠️
C语言的编译器不会检测格式字符串中转换说明中的数量与待打印项总个数是否相匹配。
1.缺少参数
printf("%d %d\n", i); // wrong
printf 会正确显示 i 的值,然后显示一个无意义的整数值。
2.参数过多
printf("%d\n", i, j);// wrong
而在这种情况下,printf 函数会显示变量 i 的值,但是不会显示变量 j 的值
printf 转换说明
转换说明这部分我做了很久,比较详细,配合下一章数据类型才能看懂大部分,剩下的就需要你在不断使用的过程中领悟了。
-
标志(可选,允许出现多于一个)
- 字段内左对齐(默认右对齐) + 在打印的数前加上 + 或 - (通常只有负数前面附上减号)例1 空格 在打印的非负数前前面加空格( + 标志优先于空格标志)例2 # 对象:八进制数,十六进制数,以g/G 转换输出的数 例3 0 用前导 0 在字段宽度内对输出进行填充。如果转换格式为d,i,o,u,x(X),而且指定了精度,可以忽略 0 例4 例 1:
printf("%d\n", 123); printf("%d\n", -123); printf("%+d\n", 123); printf("%+d\n", -123);
123 -123 +123 -123
例 2:
printf("% d\n", 123); printf("% d\n", -123); printf("% +d\n", 123);
123 -123 +123
例 3:
printf("%o\n", 0123); printf("%x\n", 0x123); printf("%#o\n", 0123); printf("%#x\n", 0x123); printf("%#g\n", 123.0); printf("%g\n", 123.0);
123 123 0123 0x123 123.000 123
例 4:
printf("%5d\n", 123); printf("%05d\n", 123); printf("%5.3d\n", 123);
123 00123 123
-
最小字段宽度(可选)
如果数据项太小无法达到这个宽度,那么会对字段进行填充。(默认情况下会在数据项左侧添加空格,从而使字段宽度内右对齐)。
如果数据项过大以至于超过了这个宽度,那