2.5.1 再谈 printf 函数
在第 1 章的第一个 C 语言程序中使用了 printf 函数,程序通过这个函数在控制台的窗口上输出一行文本字符串。其实这只是 printf 函数最基本的用法,它还拥有更多强大的功能,值得我们进一步了解。
printf 函数通常被称为“格式化打印函数”,它的第一个参数称为“格式化字符串”,在“格式化字符串”中可以使用“占位符”(或称转换说明符)把一些其他类型的数据镶嵌到文本字符串中进行打印输出。
不知大家在上学时有没有去图书馆抢座位的经历呢?先让某个腿快的同学跑去图书馆,找到空的座位,就在上面放一本书或一个文具盒,表示这个座位已经有主人了,直到同学来了,再把东西收起来,然后坐到座位上。“占位符”与占座非常类似,我们可以在“格式化字符串”的某个位置放一个“占位符”,表示这儿会有数据出现。一个“格式化字符串”中可以放置多个“占位符”,当程序进行打印输出时,这些“占位符”就会被真正的数据所替代。这些“占位符”都是以百分号“%”开头的,常用的占位符见表 2.16。
表 2.16 printf 函数的占位符
通过在格式化字符串中使用占位符,可以很灵活地将一些实时的数据嵌入到输出字符串中进行打印,每一个占位符对应一种类型的数据。例如我们要使用 printf 函数来格式化打印一个学生的姓名、身高和体重,可以这样写:
int iHeight = 180; float fWeight = 76.5F; printf("Name:%s, Height:%dcm, Weight:%fkg\n", "XiaoMing", iHeight, fWeight);
在 printf 函数的格式化字符串中,出现了 3 个占位符:第一个占位符是“%s”,表示这儿会有一个字符串出现,在程序执行时,它会被后面的字符串常量"XiaoMing"所替代;第二个占位符是“%d”,表示这儿会有一个整数出现,在程序执行时,它会被后面的整型变量 iHeight 的值所替代;第三个占位符是“%f”,表示这儿会有一个浮点数出现,在程序执行时,它会被后面的浮点型变量 fWeight 的值所代替。所以在使用 printf 函数时,在格式化字符串中出现了多少个占位符,在后面就要跟上相应数量的参数。一个萝卜一个坑。
当所有的占位符都被后面的数据替代后,最终输出在控制台窗口上的文本字符串为:“Name:XiaoMing, Height:180cm, Weight:76.500000kg”。
细心的读者可能会发现,表示体重的浮点数的最后多出了 5 个 0。这是正常的,因为默认对浮点数的输出格式就是要求保留 6 位有效小数。这么多的 0 跟在后面,是不是感觉不太美观?能不能改变一下,让它不出现 0,或者少出现几个 0 呢?可以的,所以说 printf 函数功能强大,它除了可以使用占位符来给数据预留位置,还可以通过搭配“修饰符”来对这些数据进行输出格式上的精细控制,例如利用“控制符”来设置数据的输出宽度、对齐方式、数据精度等等。一些常用的“修饰符”见表 2.17。
表 2.17 printf 函数的修饰符
这些修饰符是搭配占位符来使用的,不能单独使用。假如想让学生体重在输出的时候只保留两位有效小数,需要这样修改:
printf("Name:%s, Height:%dcm, Weight:%.2fkg\n", "XiaoMing", iHeight, fWeight);
由原来的“%f”改为“%.2f”,这样就会让体重的输出结果只有两位小数,最终输出在控制台窗口上的文本字符串变为:“Name:XiaoMing, Height:180cm, Weight:76.50kg”。少了一大堆 0,是不是感觉美观多了?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论