-
while
-
for
-
do while
一、while语句
我们已经掌握了,if语句:
while语句,可以实现循环
while语句执行的流程:
(1)while语句结构
while循环的实例:打印0到10
(2)while语句中的break与continue
*break用法
、
总结: break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:
while中的break是用于永久终止循环的。
*continue用法
总结: continue在while循环中的作用就是:
continue是用于终止本次循环的。
也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
(3)getchar和putchar
getchar表示键盘输入读取字符,putchar表示键盘输出
运行结果:
*EG*
我们要思考,为什么我们输入密码后,直接就输出了???
打开监视窗口,可以看到程序运行到scanf("%s", password);后直接跳到ret = getchar();并且ret=10。
解释——> scanf,getchar都是输入函数,读取数据时从一个叫输入缓冲区的地方取数据,当执行scanf后,我们需要输入密码(字符串),并按下回车才能使程序执行下一步,于是我们输入密码123456后我们按了回车,此时输入缓冲区实际得到’123456\n’的字符串,而不是’123456’。
’\n’实际上就是回车,scanf取得字符串‘123456’,留了个‘\n’,getchar取得后赋值给ret,而’\n’的ASCLL码值就是10,于是ret = 10;ret得到了值。于是不会等待我们输入Y\N,而是直接进入if语句,且ret != ‘Y’,于是程序直接输出“放弃确认”。
为此,我们应该将输入缓冲区清空,使getchar不能得到‘\n’,因此程序应更改为:
此时一个字符串的便能成功设置。但多个字符串能不能成功输出呢?
联系上面分析,我们可以知道,多个字符串仍会失效。
因为scanf只会读取空格前的代码,所以取掉第一个字符串后,还会留下一个字符串和‘\n’,用上面的的代码,getchar会取得第二个字符串中的第一个元素,只要这个元素 != ‘Y’,依旧会直接输出结果。这时可以用while循环改进。
改进
至此,代码功能完备。
二、for循环
语法:
注:
表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。
for循环的执行流程图:
(1)for循环举例
在while语句中,变量初始化部分,判断部分,调整部分是分开的,当代码相当长时,不易于更改变量。
于是我们引入一个新循环——for循环。for循环中变量初始化部分,判断部分,调整部分链接在一起,更改方便。
(2)for循环中的break与continue
for
break在for循环中的作用与在while语句一样,均为跳出循环
continue
可以看到程序能够运行,不会陷入死循环,这与while语句中的contiune效果不同。
间接说明for循环相对while存在优势。
for语句的循环控制变量一些建议:
1.不可在for循环体内修改循环变量,防止 for 循环失去控制。
2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
如:
问:
1.打印几个呵呵?100个
2.打印几个呵呵?10个
3.打印几个呵呵?2个
4.循环几次? 0次
三、do…while循环
执行流程
(1)do…while循环举例
(二)do while循环中的break和continue
break
continue