把附录看了看,但是只看了printf函数族这一部分,因为后面的部分对我来说太高深了,
至少对于现在的我来说还太高深了。
printf函数族
printf函数的第一个参数是关于输出格式的说明,它是一个描述了输出格式的字符串。
printf函数把格式说明字符窜中的字符逐一复制到标准输出,直到格式字符串结束或者遇到
一个%字符。这时函数并不打印%字符,而是查看紧跟%字符之后的若干字符,以获得有关
转换其下一个参数的指示。
与printf函数同族的函数还有fprintf和sprintf。fprintf函数的作用是把数据写到任何文
件中,需要些入的特定文件将作为该函数的第一个参数,它必须是一个文件指针。当输出数
据不是被写入到一个文件中时,我们可以使用sprintf函数。该函数的第一个参数是一个指
向字符数组的指针,sprintf函数将其输出数据输入到这个数组中。该函数生成的输出数据总
是以空字符结尾,如果希望在输出数据中出现一个空字符,我们可以显示的使用%c格式说
明把它打印出来。
这三个函数的返回值都是已经传送的字符数,其中sprintf函数的返回的字符数不包括
空字符。
格式码
格式字符串中的每一个格式项都是由%符号打头,后面接一个称为格式码的字符,格式
码指明了格式转换的类型。
%d:打印整数
%o:打印8进制的数
%x和%X:打印16进制的数。其中%x中表示的a到f是小写,%X中表示的a到f是大写
%f、%g和%e:打印浮点数。%f是以小数形式打印,精确到小数点后六位;%e是以指数形
式打印,精确到小数点后六位;%g是当数字的绝对值大于999999或者特别小时,以科
学技术法的形式打印。%G与%g相同,%E与%e的区别是用E来代替e来表示指数形式
%s:打印字符串一直对应的参数是一个字符串的指针,直到遇到空字符为止
%c:打印单个字符
%%:打印%字符
在%与格式码之间可以使用一些修饰符来修饰。
修饰符
l:长形数字。如%ld
宽度修饰符(数字):设定输出字符的个数,如果没有达到设定的长度则会用空格补上,如
果超过设定长度则会自动调整以容纳该数值。宽度修饰符对于所有的格式码都有用,包
括%%。
精度修饰符:根据不同的格式码,拥有不同的意义
对于%d、%o、%u和%x,精度修饰符指定了最少打印的位数
对于%e、%E和%f,精度修饰符指定了小数点后应该出现的数字位数
对于%g和%G,精度修饰符指定了打印数值中的有效数字位数
对于%s,精度修饰符指定了将要输出的字符个数
对于%%和%c,精度修饰符忽略
标志
-:要求显示方式为左对齐,在右端填充空白字符
+:要求将要打印的数字,都以它的符号(正负号)作为第一个字符
空白字符:如果某数是一个非负数,那么在它的前面插入一个空白符。如果空白符与—
+同时出现则以+为准。如果我们使用科学技术法,那么% e与%+e比%e要有用的
多
#:对数值输出的格式进行微调,具体方式与特定的格式项有关。给%o格式项加上标志
符#的效果是:当有必要时增加数值输出的精度(这只需要输出的第一个数字为0
就已经做到了)。#对浮点数的影响有两点:1.它要求小数点必须被打印出来,即使
小数点后没有数字2.如果用于%G和%g格式项,打印出的数值尾缀的0将不会被去
掉
可变域宽与精度
为了消除魔数我们往往会进行宏定义,但是如果在宽度修饰符和进度修饰符中使用宏定
义的数字是非法的,为了解决这个问题,我们使用*来代替宽度修饰符和精度修饰符中的数
字,然后将数字作为参数。如果对应的参数是负数,那么符号将会作为-标识符来处理。
新增的格式码
%p:用于某种形式打印一个指针
%n:用于指出已经打印的字符数,这个数被储存在对应参数(一个整型指针)所指向
的整数中
废除的格式码我就不说了,这是附录A的printf族有关内容