字符串和格式化输入输出
字符串简介
char数组类型和空字符
char数组末尾为空字符\0
表示字符串(不是数字0,是非打印字符,ASC码为0)
使用字符串
用scanf("%s",str)
读取字符串时,会在遇到第一个空白字符、制表符或者换行符处停止读取
strlen()函数
strlen以字符为单位给出字符串的长度,而sizeof则会将空字符也计算在内
注:sizeof接括号表示获取某个类型的大小,不接括号表示获取某个具体量的大小,括号对于类型是必需的,对于具体量是可选的
常量和C预处理器
定义常量的好处:
- 常量名可以给出的信息,让代码可读性更高
- 可以方便修改
define语句的注意点:
- 不要加分号,因为这是一种替代机制,不是C的语句
- 常量名要大写,或是加上c_或k_表示常量
- 千万不要加赋值号,注意是替代机制
用const关键字可以把一个变量声明转换成常量声明,使其成为一个只读值
printf和scanf
printf
printf语句的转换说明符如果在其他地方出现不匹配错误,即使正确的说明符也会产生虚假的结果
float类型在printf中会自动转换成double
printf的返回值:如果正确输出,则返回打印字符的数目(包括所有的空白字符和不可见的换行字符),如果有输出错误,则返回一个负数
printf如何打印一段较长的字符串:
-
使用多个printf语句
-
使用反斜线
\
和回车键的组合结束一行printf("here is one way \ to print a long string.");
-
使用字符串连接的方法,两对引号之间的空白字符将被忽略
printf("here is another way" "to print a long string.");
scanf
区别于printf,float和double 类型的转换说明符不同,float用%f
,double用%lf
scanf输入的过程(以说明符%d为例):
-
每次读取一个输入字符,跳过空白字符,直到遇到一个非空白字符
-
如果遇到的是数字或是符号,则保留,并读取下一个字符
如果遇到的是非数字字符,则得出结论:已读整数的结尾,并将非数字字符放回输入
-
计算读到的数字的对应数值,并将该值放到指定的变量中
格式字符中的常规字符
-
格式字符串中的普通字符一定要与输入字符串准确匹配,不过可以跳过整数前的空白字符
scanf("%d,%d",&n,&m); /*输入可以是: 8,4 8, 4 */
-
格式字符中的空格意味着跳过下一个输入项之前的任何空白字符
scanf("%d ,%d",&n,&m); /*输入可以是: 8,4 8 ,4 8 , 4 */
scanf的返回值是成功读入的项目个数,如果没有读取任何项目,则返回0