C语言重拾(3)——字符串和格式化输入输出
4.2 字符串简介
scanf()在读取时,遇到空白(空格、制表符、换行符)就不再读取输入。
字符串常量 “x” 与字符常量 ‘x’ 不同,区别之一是 ‘x’ 是基本类型char,而 “x” 是派生类型char数组。区别之二是 “x” 实际是由两个字符组成: ‘x’ 和 ‘\0’ 。
sizeof是以字节为单位给出对象的大小,strlen()函数给出字符串的字符长度。
#include <stdio.h>
#include <string.h> //提供strlen()函数的原型
#define PRAISE "u r an extraordinary being."
int main(void)
{
char name[40];
printf("what's your name?\n");
scanf("%s",name);
printf("Hello,%s.%s\n",name,PRAISE);
printf("your name of %zd letters occupies %zd memory cells.\n",strlen(name),sizeof name);
printf("the phrase of praise has %zd letters",strlen(PRAISE));
printf("and occupies %zd memory cells.\n",sizeof PRAISE);
return 0;
}
输入andrew,得到结果:
Hello,andrew.u r an extraordinary being.
your name of 6 letters occupies 40 memory cells.
the phrase of praise has 27 lettersand occupies 28 memory cells.
sizeof运算符报告,name数组有40个存储单元。但是只有前6个用来存储andrew,所以strlen()得到的结果是6(如果输入andrew xxx,得到的结果与andrew相同)。
name数组的第七个单元储存空字符,strlen()并未将其计入。对于PRAISE,strlen()得出的也是字符串中的字符数(但是包括空格和标点符号)。然而,sizeof给出的数更大,因为它把字符串末尾不可见的空字符也计算在内。
另外,sizeof后边是类型时,必须加括号,如sizeof(char),sizeof(int),但是特定量,括号可有可无,如sizeof name。
4.3 常量和C预处理器
#define PRAISE 预处理器也可以定义常量,一般习惯上将define后跟的符号常量大写。也有将c_或k_前缀表示常量(如,c_level)
const限定符用于限定一个变量为只读, const int MONTHS=12; //MONTHS在程序中不可更改,值为12.
4.4 printf()和scanf()
scanf()与printf()相反,它是将输入的字符串转成整数、浮点数、字符或字符串。 printf()函数使用变量、常量、表达式,而scanf()函数使用指向变量的指针。目前还未学习指针,只需记住:
如果用scanf()读取基本变量类型的值,在变量名前加上一个&;
如果用scanf()把字符串读入字符数组中,不要使用&。
小结
这章细节比较多,但是没那么难,用到的时候注意一下就好,看得也不是很仔细,先这样啦,886