文章目录
字符串的格式化输入/输出
4.2字符串简介
4.2.1char类型数组和null字符
C语言没有专门用于储存字符串的变量类型,字符串都被储存在
char
类型的数组中。其中,空字符用来标记字符串的结束,不是数字0,它是非打印字符,其ASCII码值是(或等价于)0。因此,数组的容量必须至少比待储存的字符串中的字符数多1。
4.3常量和c预处理器
4.3.2明示常量
C头文件
limits.h
和float.h
分别提供了与整数类型和浮点类型大小限制相关的详细信息。
4.4printf()和scanf()
4.4.1printf()函数
请求
printf()
函数打印数据的指令要与待打印数据的类型和数量相匹配。
由于
printf()
函数使用%
符号来标识转换说明,因此打印%
符号时需要使用两个%
符号。
4.4.3printf()的转换说明修饰符
在
%
和转换字符之间插入修饰符可以修饰基本的转换说明。
对于浮点类型,有用于
double
和long double
类型的转换说明,却没有float
类型的。这是因为在K&R C中,表达式或参数中的float
类型值会被自动转换成double
类型。一般而言,ANSI C不会把float
自动转换成double
。然而,为保护大量假设float
类型的参数被自动转换成double
的现有程序,printf()
函数中所有float
类型的参数(对未使用显式原型的所有c函数都有效)仍自动转换成double
类型。因此,无论是K&R C还是ANSI C,都没有显示float
类型值专用的转换说明。
4.4.4转换说明的意义
转换说明把以二进制格式储存在计算机中的值转换成一系列字符(字符串)以便于显示。实际上,转换说明就是翻译说明,并不会改变原始值。
4.4.5使用scanf()
scanf()
函数所用的转换说明与printf()
函数几乎相同。主要的区别是,对于float
类型和double
类型,printf()
都使用%f
、%e
、%E
、%g
和%G
转换说明。而scanf()
只把它们用于float
类型,对于double
类型时要使用l
修饰符。
可以在转换说明中(百分号和转换字符之间)使用修饰符。如果要使用多个修饰符,必须按下表中的顺序书写。
4.4.6printf()和scanf()的*修饰符
printf()
和scanf()
都可以使用*
修饰符来修改转换说明的含义。
在printf()
中,如果不想预先指定字段宽度,希望通过程序来指定,那么可以用*
修饰符来代替字段宽度。但还是要用一个参数告诉函数,字段宽度应该是多少。也就是说,如果转换说明是%*d
,那么参数列表中应包含*
和d
对应的值。这个技巧也可用于浮点值指定精度和字段宽度。
scanf()
中的*
的用法与此不同。把*
放在%
和转换字符之间,会使得scanf()
跳过相应的输出项。