C语言-第3章-格式化输出\输入


本章介绍格式化输出\输入相关知识,难点是格式化输入的理解。

3.1 输出函数printf

printf函数用来输出字符串,包含了将数值类型转换为字符串的功能。printf中的f是单词format的首字母。其使用形式为

printf(格式串,表达式1,表达式2, ...);

格式串,作为函数的第一个参数,对应了将要输出的内容。如果在其中的是普通的字符,则直接输出。如果是类似%d、%f的转换说明符,说明要显示的是值,%d对应整数类型的值,%f对应浮点类型的值,而具体要输出的值放在了printf函数之后的参数中。比如,整型变量age值为10,需要输出age中的值,并且输出全文是"年龄是*岁",printf函数调用如下:

printf("年龄是%d岁\n", age);

如果要显示的是float类型变量height,则printf函数调用:

printf(“身高是%f\n”, height);

也可以显示带有运算符的表达式

printf("年龄是%d岁,下一年的年龄是%d\n", age, age + 1);

也可以在一个printf语句中显示不同类型的表达式

printf("年龄是%d岁,身高是%f\n", age, height);

printf函数可以显示的表达式的个数是任意的,也可以没有表达式,比如我们见过的最早的程序,只显示字符串"hello, world!"

printf("hello, world!\n");

这里,要注意的问题是转换说明符和表达式的对应关系。实际上,转换说明符帮助printf函数解释二进制数值(值在内存中都是以二进制存储的),不同类型的值,其二进制数值的解释是不同的,因此转换说明符必须和表达式的数值类型相一致。

假如有如下类型变量

int age = 20;
float height = 1.7;

下面的列表给出了部分类型值的转换说明符。

表达式类型 输出 转换说明符 例子
整数 整数 d printf("%d", age); // 输出10
浮点数 浮点数(小数形式) f printf("%f", height); // 输出1.700000
浮点数 浮点数 (指数形式) e printf("%e", height); // 输出1.700000e+000
浮点数 浮点数 (小数形式和指数形式短的那个,不显示尾随的零) g printf("%g", height); // 输出1.7

C99之前,用printf输出double类型的值时与float类型的值一样,不用要加l,直接用e、f或g,C99允许printf函数使用%le、%lf和%lg来输出double类型的值。

下图是一个printf函数的例子,printf函数的格式串指明了输出的内容:
在这里插入图片描述

格式串中的转换说明符用来指明输出值的类型,值的类型不同,转换说明符不同:

在这里插入图片描述

3.1.1 细化的转换说明

转换说明还可以对显示的字符做更精确的控制。比如,我们可以用%.1f来显示浮点数,显示的效果是小数点后面只带一位小数。更一般地,转换说明可以用%m.pX格式或者%-m.pX格式。这里的m和p都是整数常量,而X是字母。m和p都是可选的。如果省略p,m和p之间的小数点也要去掉。在转换说明%10.2f中,m是10, p是2,而X是f。在转换说明%10f中,m是10,p(连同小数点一起)省去了;而在转换说明%.2f中,p是2,m省去了。

m用来指定要显示的表达式占的最小字段宽度。 如果待显示的字符数量小于m,那么整个表达式占m个字段宽度,实际显示的字符右对齐显示。比如,转换说明%4d将以" 123"显示整数123。如果在m之前放负号,则左对齐。比如,转换说明%-4d将以"123 "显示整数123。如果待显示的字符数量大于等于m,那么忽略m值,以待显示的字符数量决定整个表达式占的字段宽度。比如,转换说明%4d将以12345的形式显示12345,不会丢失数字。

p的含义很难描述,因为它依赖转换说明符X的选择。

  • f - 表示显示“定点十进制”形式的浮点数。p指明了待显示的浮点数的小数点后显示的数字的个数(默认是6,不足补零)。如果p为0,则不显示小数点和其后的小数。

  • e - 表示显示指数形式的浮点数。p的含义与在f说明符中的一样。

  • g - 表示以“定点十进制”或者指数形式来显示浮点数。选择它们中最短的那个。p的含义是显示的有效数字的最大数量。比如,%.3g将以"1.23"显示1.2345。与f不同,它不显示尾随的零。比如,%.5f将以"1.23000"来显示1.23,而%.5g将以"1.23"来显示1.23。

  • d - 表示显示整数值。p指明了待显示的数字的最少个数(必要时在

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值