while循环相关代码练习
1.输入密码并确认
为什么要添加一个while循环?
在这里引入一个概念,叫做输入函数
如scanf和getchar()
那么这些输入函数在接收数据的时候会先进入输入缓冲区
当缓冲区没东西的时候,函数才会开始等待,我们才可以输入字符。
但是,在进入缓冲区之后,函数只会拿走他想拿走的部分,而把剩余部分留在缓冲区里,
比如此代码中scanf里的'\n',当走到getchar()的时候,直接就把‘\n’读走了。
这个时候,我们就需要加入一个while循环,目的就是把‘\n’读走。清空缓冲区。
让ret能够顺利接收输入字符。
ps:不要忘记while里面的语句。
2.输出1到9的数字字符
for循环
绝大多数情况都会使用for循环。
初始化 判断 调整
语法格式for( ; ; )
在屏幕上打印1-10的数字。
除去5。
continue会跳出本次循环,还存在调整机会。
while可能会死循环,没有调整机会了。
因为初始化只在第一次循环中的开始部分进行一次,所以不用担心初始化的值一直变化。
关于for循环的建议
1.不要在for循环体内改变循环变量,防止for循环失去控制。
2.建议采用前闭后开写法。
3.for的初始化,调整,判断都可以省略。
但是:for循环的判断部分被省略,恒为正。
建议不要随便省略。
本来应该出现一百次的输出,只出现了十次。
这是因为第一次内部循环过后,p变成了10。
在第二次内部循环开始的时候直接就是从10开始,条件不成立。
问:此代码循环多少次?
答案:把0赋值给了k,直接为假,不进去,不参加循环。
do while语句
如果在do内部假如语句:
if(i==5)
continue;
会跳过本次循环,进行while,最终导致死循环。
练习
1.输出一到十的阶乘
注意:在外部循环上一定要加上一条语句:ret=1 在进入内部循环之前重置ret的值。
2.找到有序数组的某个数
使用二分查找法
不要忘记while循环中的break。
3.多个字符从两边移动到中间汇聚
见注释。
4.输入三次密码,若错误则终止输入
此代码较简单,但注意,不能用来比较两个字符串是否相等,应该使用一个库函数-strcmp