1.strlen是一个库函数-求字符串的长度,统计的是\0之前的字符个数
strlen返回值是size_t类型的,应该使用%zd
2.
3.注意下面两种转义字符
1)\ddd:ddd表示1~3个八进制的数字
\130 130是八进制,转化成十进制=1*8*8+3*8+0*1(8的一次方)=88
再对照ASCLL码表可知此处表示的字符就是x
2) \xdd:dd表示两个十六进制数字
\x30 30是十六进制,转化成十进制=3*16+0*1=48
同理此处表示字符0
十六进制:1 2 3 4 5 6 7 8 9 a b c d e f
4.计算字符串长度--注意转义字符
5.sizeof操作符
sizeof(类型)
sizeof 表达式
1)计算sizeof的操作数的类型长度的,单位是字节
sizeof操作符的操作数可以是类型也可以是变量和表达式
是类型时要加上(类型) 是表达式时可以省略括号
2)sizeof中如果放的是表达式,表达式不会真实计算
6.有无符号
1)char----有无符号取决于编译器,大部分的编译器上是有符号即signed char
2)我们认为int=signed int
无符号的进行打印我们使用%u
7.前置和后置
前置++:先++后使用 后置++:先使用后++
前置--: 先--后使用 后置-- :先使用后--
8.强制类型转换
int a=(int)3.14 ----------------意思是强制类型转换只取整数部分
9.printf()是在标准库的头文件stdio.h定义的
printf()可以在输出文本中指定占位符--就是这个位置可以用其他值代入
printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n+1个,
如果参数个数少于对应的占位符,printf()可能会输出内存中的任意值
2)printf()允许限定占位符的最小宽度,如果不满该位数,对应的值前面会添加空格,如果希望在输出内容后面添加空格,可以在占位符的%后面插入一个-号----(%-ad\n)
10.
-13.45e12# 0
整数部分打印-13,小数部分打印0.45*10^12(浮点数在内存中可能无法精确保存)
11.初始化
在创建变量时给变量一个初始值称为初始化,如果不初始化有些编译器会报错
1)局部变量不初始化,它的值是随机的
2)全局变量不初始化其数值默认为0
12.
13.
14.可以用*代替要输入的值
printf("%*.*lf\n",a,b,123.45)-----------printf("%*.*lf\n",12,6,123.45)
15.赋值忽略符
把*加在任何占位符的百分号后面,该占位符就不会返回值,解析后将会被丢弃
第一种写法,输入年月日时要加 - 不然解析数据就会 失败,而第二种使用赋值忽略符输入时就没有相关限 制
16.scanf()的语法和printf()类似
1)scanf()处理数值占位符时,会自动过滤空白字符,包括空格,制表符,换行符,所以用户输入的数据之间,有一个或多个空格不影响scanf()解析数据,使用回车也不会影响
2)在VS环境中按三次ctrl+z,才结束了输入
17.占位符
1)
除了%c以外,都会忽略起首的空白字符,%c不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格
如果要跳过字符前的空白字符,可以写成scanf(" %c"),在%c前面加一个空格,表示跳过零个或多个空白字符
2)%s
‘’)从当前第一个非空白字符开始读起,直到遇到空白字符(空格,换行符,制表符)为止
‘’)scanf()将字符串读入数组时,不会检测字符串是否超过了数组长度,使用%s占位符时,应该指定读入字符串的最长长度,写成%[m]s,表示读取字符串的最大长度,后面的字符串将会被丢弃