整理今天的学习内容
1.scanf 函数
用于读取用户的键盘输入
键盘--标准输入--→程序--标准输出--→屏幕
(1)scanf ()的参数是格式字符串和用户输入的变量
变量前面必须加上运算符(指针变量除外),因为scanf ()传递的是地址不是值,即将变量的地址,指向用户输入的值
(2)scanf ()处理数值占位符时,会自动过滤空白字符,包括空格,制表符,换行符等
(3)scanf ()处理用户输入的原理:用户的输入先放入缓存,等待按下回车键后,按照占位符对缓存进行解读
(4)scanf ()的返回值是一个整数,表示成功读取的变量个数
如果没有读取任何项,或者匹配失败,则返回0;
Ctrl+z 为提前输入结束
如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量 EOF(-1) EOF为end of file 文件结束标志
在VS环境中需要按三次 Ctrl+z才能结束输入
(5)占位符
与printf()基本相似
%[ ] 在方括号中指定一组匹配的字符,(如%[0~9]),遇到不在集合中的字符,匹配将会停止
占位符除了%c以外,都会自动忽略起首的空白字符,%c不忽略空白字符,总是返回当前第一个字符
可以在%c的c前加一个空格(% c),表示跳过0或多个空白字符
%s不能简单等同于字符串,它是从当前第一个非空白字符开始读起,直到遇到空白字符为止,所以%s不会包含空白字符,不适合用来读取可能包含空格的字符串
可以多个%s一起使用
scanf()遇到%s占位符,会在字符串变量末尾储存一个空字符\0
scanf()将字符串读入字符数组时,不会检测字符串是否超过了数组长度,容易出错,所以为了防止这种情况,应该在使用%s时指定读入字符串的最长长度,即写成%[m]s
(6)赋值忽略符(用于用户输入可能不符合预定格式时)
如果格式不正确,会解析失败
使用赋值忽略符 * 加在任何占位符的百分号后面
2.if语句
实现分支结构:if swich 实现循环结构:for while do while
(1) 语法:if(表达式)
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行
C语言中,0为假,非0表示真
(2)if...else...语句
语法形式:if(表达式)
语句1
else
语句2
(3)分支中包含多条语句
默认在if 和else中都只控制一条语句,如果需要同时控制两条语句,要使用{ }将代码括起来
(4)嵌套if
if嵌套在else子句中
如:要求输入一个整数,判断输入的整数是0,还是正数或者负数
if嵌套在if语句中
如: 输入一个整数,如果是正数,再判断是奇数还是偶数,如果不是正数则输出:非正数
(5)悬空else问题
如果有多个if和else,else总是和最接近的if匹配
3.关系操作符
(1)关系操作符是关系表达式中使用的运算符,有:> < >= <= == !=
(2)为了及时改正把==写成=的错误,可以将变量写在等号的右边
如:if(3==x)
(3)多个关系运算符不宜连用(a<b<c)
这个表达式不会报错,但由于关系运算符是从左到右计算,所以实际执行的是:(a<b)<c,a<b返回0或1,所以最终是0或1与变量c进行比较,应该改为:a<b &&b<c
4.条件操作符
条件操作符也叫三目操作符,接受三个操作数
形式:exp1 ?exp2 :exp3
计算逻辑:如果exp1为真,exp2计算,计算的结果是整个表达式的结果;如果exp1为假,exp3计算,计算的结果是整个表达式的结果
5.逻辑操作符
(1)! :逻辑取反运算符(改变单个表达式的真假)
(2)&& :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)
(3)|| :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)
(4)短路
对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏
|| 操作符的左操作数的结果不为0时,就⽆需执⾏右操作数