18-关键概念
4.5 关键概念
C语言用 char 类型表示单个字符,用字符串表示字符序列。字符串常量是一种字符串形式,即用双引号把字符括起来: "Good luck, my friend" 。可以把字符串存储在字符数组(由内存中相邻的字节组成)中。字符串,无论是表示成字符常量还是存储在字符数组中,都以一个叫作空字符的隐藏字符结尾。
在程序中,最好用 #define 定义数值常量,用 const 关键字声明的变量为只读变量。在程序中使用符号常量(明示常量),提高了程序的可读性和可维护性。
C语言的标准输入函数( scanf() )和标准输出函数( printf() )都使用一种系统。在该系统中,第 1 个参数中的转换说明必须与后续参数中的值相匹配。例如, int 转换说明 %d 与一个浮点值匹配会产生奇怪的结果。必须格外小心,确保转换说明的数量和类型与函数的其余参数相匹配。对于 scanf() ,一定要记得在变量名前加上地址运算符( & )。
空白字符(制表符、空格和换行符)在 scanf() 处理输入时起着至关重要的作用。除了 %c 模式(读取下一个字符), scanf() 在读取输入时会跳过非空白字符前的所有空白字符,然后一直读取字符,直至遇到空白字符或与正在读取字符不匹配的字符。考虑一下,如果 scanf() 根据不同的转换说明读取相同的输入行,会发生什么情况。假设有如下输入行:
-13.45e12# 0
如果其对应的转换说明是 %d , scanf() 会读取 3 个字符( -13 )并停在小数点处,小数点将被留在输入中作为下一次输入的首字符。如果其对应的转换说明是 %f , scanf() 会读取 -13.45e12 ,并停在 # 符号处,而 # 将被留在输入中作为下一次输入的首字符;然后, scanf() 把读取的字符序列 -13.45e12 转换成相应的浮点值,并存储在 float 类型的目标变量中。如果其对应的转换说明是 %s , scanf() 会读取 -13.45e12# ,并停在空格处,空格将被留在输入中作为下一次输入的首字符;然后, scanf() 把这 10 个字符的字符码存储在目标字符数组中,并在末尾加上一个空字符。如果其对应的转换说明是 %c , scanf() 只会读取并存储第 1 个字符,该例中是一个空格[4]。