循环(九)while循环

一    循环

①  循环理解

循环动作-->做一些'重复'的事情

②  循环形式

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

getchar学习

EOF是什么

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)第二版

思考1ret变量状态怎么变化的?

上一版代码有点'问题','异常'怎么'产生'? -->Deubg'调试'

思考2getchar()获取的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)补

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值