一 循环
① 循环理解
循环动作-->做一些'重复'的事情
② 循环形式
1. 'while'语句
2. 'for'语句
3. 'do while'语句
③ while循环语法格式
while(表达式) {
循环语句;
}
④ while语句的执行流程
⑤ while死循环
// 最简单的'死循环'
// '{}'才能包含'多条'语句
while(1) {
printf("死循环\n");
}
⑥ 需求1
屏幕上打印'[1~10]' -->'基本练习'
⑦ while中的break
+++++++++++'break'在while循环中的'作用'+++++++++++
功能: 其实在循环中只要'遇到break',就'停止'后期的所有的循环,直接'终止'循环
说明: while中的break是用于'永久终止'当前的'while'整个循环的
备注: 强调'当前整个循环',可能涉及'循环嵌套'
⑧ while中的continue
++++++++++++'continue'在while循环中的作用就是++++++++++++
1) continue是用于'终止本次循环'的
2) 也就是本次循环中continue后边的代码'不会再执行',而是直接'跳转到'while语句的'判断'部分,进行下一次循环的
理解:分清'跳出当前整个while循环'和'跳出本次while循环'
备注:一个'while'循环,'包含'很多次
⑨ 练习1
EOF: end of file -->'文件结束标志' --> C语言中是'关键字'
逻辑: 如果'接收'的字符不是EOF,则'继续'
备注: Linux中的ctrl-d '不是发送信号',而是表示一个'特殊的二进制值',表示 EOF
但是ctrl-d在'getchar应用中'又有些'特别'之处.
在Linux系统之中,EOF'根本'不是一个字符,而是当系统'读取到文件结尾',所'返回'的一个信号值-->也就是'-1'
补充: Windows中'ctrl+z'表示'EOF'
三 扩展学习
(1)第一版
1) EOF在'开发中'的作用
2) getchar()与while的结合
++++++++++++++'预期'++++++++++++++
1) '本来'应该在我们输入密码之后,'给予'提示,等待我们'输入(Y/N)'
2) '然后'根据我们输入'Y|N',调转到'对应逻辑'
++++++++++'实际'++++++++++
不'符合'要求,'直接打印放弃确认'
(2)第二版
思考1:ret变量状态怎么变化的?
上一版代码有点'问题','异常'怎么'产生'? -->Deubg'调试'
思考2:getchar()获取的10是哪里来的
+++++++'\n'是哪里来的?+++++++
1) ret变量'最终'是10,对应着'\n'字符
2) '\n'是输入密码123456,还敲了个'回车',被'getchar()'静悄悄'拿走'了
3) 不是'Y',所以输出'放弃确认'
思考3:整个逻辑解读?
+++++++++++++'两个概念'+++++++++++++
1. 输入缓冲区
2. 输入函数-->'scanf'、'getchar()'
+++++++++++++'整个流程'+++++++++++++
1) 缓冲区没有'东西[字符]',执行到'输入函数'时,就会'等待'用户输入,表现为'光标闪动'
2) 用户输入'123456\n',此时scanf把'123456'读走了,此时输入缓冲区只剩下'\n'
备注: '\n'是回车产生的,敲了'回车',scanf才知道'结束',存到相应的'地方'
3) 此时代码继续走,走到了'getchar()',需要读取一个字符,而'输入缓冲区刚好'有一个'\n'字符,把其读走了,不会等待用户输入
4) 此时与'Y'字符不匹配,就执行另外一个'逻辑'
(3)第三版
1) 由于要'满足需求',核心是让'getchar()'读的时候,看到'输入缓冲区'是被'清空'的,如何做呢?
(4)第四版本
备注: '上面'不够'健壮'
输入密码的时候,输入: 123456 ABCD -->'出现问题' -->scanf 接收是'123456',输入缓冲区是' ABCD\n'
解决策略:循环'一直'读取字符,知道'缓冲区内容'为空则'停下来'
知识点: 'while'和'getchar()'完美结合
#include <stdio.h>
int main() {
//1. 存储密码
char password[20] = {0};
//2. 接收返回字符
int ret = 0;
//3. 判断
int ch=0;
printf("请输入密码:>");
scanf("%s", password);
printf("请确认(Y/N):>");
//4. 是否读取到'最后'的回车;内容'是否清空'
while ((ch=getchar()) !='\n'){
; // 循环体不能为空,这里用';'代替表示什么也不做
}
ret = getchar();
if (ret == 'Y') {
printf("确认成功");
} else {
printf("放弃确认");
}
}
(5)补充