第4章 字符串和格式化输入/输出
- 字符串是一个或多个字符的序列,双引号用于告知编译器它括起来的是字符串。
- C语言没有专门用于存储字符串的变量类型,字符串被存储在
char
类型的数组中。数组由连续的存储单元组成,字符串中的字符被存储在相邻的存储单元中,每个单元存储一个字符。 - C语言用空字符
\0
标记字符串的结束。C语言中的字符串一定以空字符结束,这说明数组容量必须至少比待存储字符串中的字符数多1。 - 数组是同类型数据元素的有序序列。
scanf()
函数在读取字符串输入时将空字符放入字符串末尾。- 编译器会在用双引号括起来的字符串末尾添加空字符。
scanf()
函数只会读取字符串中的第一个单词,遇到空白符时停止。- 注意字符串常量
"x"
和字符常量'x'
的区别。'x'
是基本类型(char
),"x"
是派生类型(char
数组);"x"
由'x'
和空字符\0
组成。 strlen
函数给出字符串中的字符长度。sizeof
运算符以字节为单位给出对象的大小。- C99和C11标准为
sizeof
运算符的返回类型添加了%zd
转换说明,对于strlen()
同样适用。 - 对于
sizeof()
运算符,当运算对象是类型时,必须添加圆括号,对于特性量,圆括号可有可无。 const
限定符用于限定一个变量只是只读,不可能更改。- C头文件
limits.h
和float.h
分别提供了与整数类型和浮点类型大小限制相关的详细信息。 - 请求
printf()
函数打印数据的指令要与待打印数据的类型相匹配。 - 转换说明
%c
、%p
、%s
。 - 格式字符串包括:实际要打印的字符和转换说明。
printf()
中,-
表示待打印项左对齐;+
显示符号;数字
表示最小字段宽度;.数字
表示精度。- 转换说明将以二进制格式存储在计算机中的值转换成一系列字符(字符串)以便于显示。
- 转换说明应该与待打印值的类型相匹配。
printf()
函数返回打印字符的个数。如果由输出错误,其返回一个负值。- 打印较长字符串时,可适用多个
printf()
函数,可以使用反斜杠\
或者Enter键组合段话,或者使用ANSIC引入的字符串连接(在两个用双引号括起来的字符串之间用空白隔开,C编译器会把多个字符串看作一个字符串)。 printf()
函数的参数列表中使用变量、常量和表达式;scanf()
函数使用指向变量的指针。- 对于
scanf()
函数,如果scanf()
读取基本变量类型的值,则在变量名前加入一个&
;如果把字符串读入字符数组中,则不需要使用&
。 scanf()
函数使用空白(换行符、制表符和空格)把输出分为多个字段。- 如果使用字段宽度,
scanf()
会在字段结尾或第一个空白字符处停止读取(满足两个条件之一就可以)。 scanf()
函数允许把普通字符放在格式字符串中,除空格字符以外的普通字符必须与输入字符串严格匹配。scanf()
函数返回成功读取的项数。如果没有读取任何项,且需要读取一个数字而用户却输入一个数值字符串,则会返回0。printf()
中可以用*
修饰符代替字段宽度;scanf()
中可以将*
放在%
和转换字符之间,使得scanf()
跳过相应的输入项。