c- language- learning 09循环语句 while、for

Tuseday , 1st, Mar,2022

while

for

do while

//while

循环是存在的

循环是可终止的

表达式若为非0,就是真,那么一定要执行

循环语句。有可能为一个语句块

 

 

 break使用,会直接跳出循环

 continue执行后,跳过本次循环,又回到while,死循环

1234_(死循环)

 

 //使用场景1

 getchar-获得字符

 

 正确时返回的是ascii码值,如果错误返回的是eof

EOF-文件结束标志

 

 

getchar()获取一个字符放在ch里,此时这个字符如果不等于EOF(即不是结束或着是遇到错误了),那么开始循环,打印这个字符 

 

 getchar是从键盘 缓冲区 (得先有) 处读取字符的,当用户输入A,且敲入回撤(\n)确定后,

用户实际输入为两个字符,分别是A和\n

getchar先获得A,判断不是EOF,循环为真,putchar输出A

getchar然后获得\n,判断不是EOF,循环为真,putchar输出\n, 即回车,等待下次输入

所以打印的光标自动落在回车行

所以getchar不会忽略回车字符

这样的一般用于多组数组中

//使用场景2

在scanf中password是数组名本身就是个地址,

所以这里不需要用&password进行取地址操作

 

 getchar 和scanf 同时等待去缓冲区取数

scanf会去取数123456,但不会取\n

输出“请确认密码”

此时getchar因为可以取回车符,所以会取\n, 存到ch中,

if会进入判断,此时ch==\n,而不是Y,

所以也会输出“确认失败”

优化改进1:

所以在输出“请确认密码”后应该清空缓冲区

直接用getchar()读取,不存储,只是读取即可

但是如果密码中含有空格,此方法又会失败

 

此时输入的在缓冲区的为:123456 abcdef\n

scanf读取123456

剩下: abcdef\n

getchar接着只能读取一个空格

进入if判断剩下的,依然失败

优化改进2:

空格以后的一直取完,用while一直取

 一直取,不用语句

getchar返回的是字符对应的acsii码值,所以为int

EOF为-1,也返回int

 在ascii表中,数字0-9,因为返回的是ascii码,所以直接用< >号来比较判断:

小于'0'字符的和大于'9'字符的都为非数字

因此,非数字会执行contibue而不打印

 

为什么循环语句有了while还需要for?

 循环结构由3部分决定:初始化条件,判断部分、调整部分

由于在后续考虑到会使用大量代码插入进去,使得3部分分离太散,不方便分析和阅读

因此考虑将3个部分放在一起,就需要使用for

//for

 

//break 和 continue在for中

 

 break-终止for循环

continue-后面的代码不执行,开始新一轮的循环,for中跳到调整部分,while有可能会避开调整部分

 

 

 注意:

1.循环变量改在了循环体内-死循环/改变

 调整部分放到下面是可以的

 

2.前闭后开

 

i<10优于i< =9,因为便于看出,刚好循环了10次

//for变种1-3个部分都省略了

判断部分的省略-判断部分恒为正-死循环

3个部分都可以省略

但省略容易出错

如:

 

以上没有省略的总共打印9次

 

 省略了判断语句后,只打印了3次

i = 0 时i<3满足第一个for循环,进行第二个for循环,j自增,打印3次,此时j=3

跳出后i自增,为1,满足第一个for,进行第二个for,

由于j还是等于3不满足条件,所以不执行第二个for循环,不打印

同理,总共只打印了第一轮的3次

 

//for变种2-含两个变量

 

 0次

判断部分的k=0为赋值,不是等于!!!!

把0赋值给k,k=0 为假,所以这个循环一次都没有进入

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值