C陷阱与缺陷--读书笔记8 建议与答案 及 附录A

第八章
 
一、知识点
1、在判断相等的比较表达式时可以把常量放在表达式的左侧。例如:(P130)
c == '\t' 改写为 '\t' == c
 
 
附录A
 
一、知识点
1、printf函数是把数据写到标准输出,而fprintf函数则可以把数据写到任何文件中。需要写入的特定文件,将作为fprintf函数的第1个参数,它必须是一个文件指针。因此,
printf(stuff);
从意义上来说就等效于
fprintf(stdout, stuff);
当输出数据不是被写入一个文件时,我们可以使用sprintf函数。sprintf函数的第1个参数是一个指向字符数组的指针,sprintf函数将把其输出数据写到这个字符数组中。sprintf函数的其余的参数与printf函数的参数相同。sprintf函数生成的输出数据总是以空字符收尾。(P152)
 
2、printf、fprintf、sprintf这三个函数的返回值都是已传送的字符数。对于sprintf的情形,作为输出数据结束标志的空字符并不计入总的字符数。如果printf或者fprintf在试图写入时出现一个I/O错误,将返回一个负值。因为sprintf函数并不进行I/O操作,因此它不会返回负值。(P152)
 
3、因为格式字符串决定了其余参数的类型,而且可以到运行时才建立格式字符串,所以C 语言实现要检查printf函数的参数类型是否正确是异常困难的。(P152)
 
4、宽度修饰符对所有的格式码都有效,甚至%%也不例外。因此,例如:
printf("%8%\n");
将在一个宽度为8个字符的域中以右对齐的方式打印出一个%符号。换言之,就是先打印出7个空格字符,然后紧跟着打印一个%符号。(P159)
 
5、标识字符以及它们的含义如下:
(1)、在显示宽度大于被显示位数时,数据尾部都以显示区的右端对齐,左端则被填充空白字符。标识字符-的作用是,要求显示方式改为左端对齐,在右端填充空白字符。因此,仅当域宽修饰符存在时,标识字符-才有意义。
(2)、标识字符+的作用是,规定每个待打印的数值在输出时都应该以它的符号(正号或负号)作为第一个字符。因此,非负数打印出来,应该在最前面有一个正号。标志符号+与标识字符-之间不存在任何联系。
(3)、空白字符作为标识字符时,它的含义是:如果某数是一个非负数,就在它的前面插入一个空白字符。如果我们希望让固定栏内的数值向左对齐,而又不想用标识字符+,这一点就特别有用。如果标志字符+与空白字符同时出现在一个格式项中,最终的效果以标志字符+为准。例如:
(4)、标志字符#的作用是对数值输出的格式进行微调,具体的方式与特定格式项有关。给%o格式项加上标志字符#的效果是:当有必要时增加数值输出的精度(这只需要让输出的第1个数字为0就已经做到了)。这么规定的意义在于,让八进制数值输出的格式与大多数C程序员管用的形式一致。(P162)
 

posted on 2012-05-01 09:27  谷堆旁边  阅读(1329)  评论(0编辑  收藏  举报