赞
踩
其实,C语言没有提供专门的数据输入、输出语句,所有数据的输入输出都是通过调用标准库函数中的输入入、输出函数来实现。
printf("格式控制串",输出列表);
格式说明符(以”%”开始)、转义字符(以”\”开始)和普通字符。
常量、变量或表达式。
ps:
如果格式控制串中没有格式说明符,那么该输出语句里就不能有输出列表,也不需要表示分隔的逗号,这是printf()函数的最简单的形式。
在格式说明符中,可以利用修饰符控制输出项的对齐方式以及输出的宽度和精度。
实际数据位数为1,不到2位,数据左面用空格补满。
实际数据位数为3,超过2位,以实际位数3输出。
实际数据位数为1,不到2位,数据右面用空格补满。
实际数据位数为1,不到5位,数据左面用0补满。
通过加#,就可以实现带前导的输出了。
如果输出以下数据:
1314.520
则宽度为8,精度为3。
那这个宽度是指的原数据的宽度,还是输出后的宽度呢?
但当采用以下格式时:
原数据宽度为7个数字,一个小数点。我们要求输出时宽度为八,精度为一。
发现前面补了两个空格,说明所谓宽度是指输出时的宽度。
精度是怎么得到的,直接截断还是四舍五入呢?
如果是直接截断,那应该是 1314.2,可结果是 1314.3,说明才用的是四舍五入。
编译程序只是检查printf()函数的调用形式,不分析格式字符串,如果格式字符与输出项类型不匹配,不进行类型转换。
错误分类及现象:
(1)如果格式说明符的个数少于输出项的个数,多余的输出项不予输出。
(2)如果格式说明符的个数多于输出项的个数,则对于多余的格式将输出不确定值。
以VS为例:
如果输出项是i++,则当即处理该输出项。如果是++i,则只执行++i运算并不将结果作为输出结果,并将输出项位置压入堆栈,只有当所有输出项从右向左处理完毕之后,再从堆栈弹出所有因延后操作而没有填入最终结果的输出项位置,将最终执行的结果i,作为相应的结果输出。
通俗来说,++i,就是在先加完,等结束后,再赋值,然后输出。而i++则是先赋值,然后直接输出,最后再自加。
对此例分析,虽然输出是从左向右的,但是计算确是从右向左的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。