一、简单的while循环
例如:打印1-10的数字
![](https://i-blog.csdnimg.cn/blog_migrate/0e161d8a0f247aea1500244406ace707.png)
分析代码:
创建变量i
while语句,条件为i<=10,当i>10时,跳出循环
i++,每循环一次i+1
源代码
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
i++;
}
return 0;
}
二、while语句中的break
break的作用为停止执行break下的语句,直接跳出循环
![](https://i-blog.csdnimg.cn/blog_migrate/879af4c4f6b354bbd512f98214149cab.png)
分析代码:
和第一段代码大部分一致
在while循环中加入if语句
if的条件为当i==5时,直接跳出循环(break)
此代码的结果为:1 2 3 4(5还来不及打印就结束程序)
源代码
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;
printf("%d ", i);
i++;
}
return 0;
}
三、while语句中的continue
continue的作用为在while循环中结束continue后的所有语句,重新开始新循环
![](https://i-blog.csdnimg.cn/blog_migrate/39feba193e72a6d7fe91ec472fc53703.png)
分析代码:
和第二段代码基本一致
将break改为continue
当i=5时进入if分支语句,然后结束continue后的语句(跳过打印),进入新循环
进入新循环,此时的i还是=5,则进入死循环
此代码的结果为:1 2 3 4 _(打印完1234后程序还在跑,进入死循环)
源代码
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;
printf("%d ", i);
i++;
}
return 0;
}
四、while语句中的getchar
getchar的作用为获取键盘上的字符,可以将它存在一个变量中,与scanf作用相似
![](https://i-blog.csdnimg.cn/blog_migrate/df00dbbb46d9346a35736cc25e1465c8.png)
分析代码:
创建变量ch
while循环语句,条件如图,含义为,用关键词getchar(输入)获取键盘上的字符存入变量ch
有一个EOF(end of file)含义为文件的结尾,是一种错误
只要getchar不等于EOF就一直循环下去
while循环中的语句项为putchar,作用是将键盘上的字符再打印出来(输出)
执行效果为:
![](https://i-blog.csdnimg.cn/blog_migrate/2731a74ebcaf653d9751c81b3c69920d.png)
想停止程序的话,用Ctrl+z即可
源代码
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
五、小任务(更好地了解getchar)
题目:写一段代码,让用户输入密码,并且让用户确认密码(必须使用getchar)
![](https://i-blog.csdnimg.cn/blog_migrate/c3d4f85ffcf037bc1f20ea400c1f6007.png)
分析代码:
创建int类型的数组,名称为password,内有20个元素
打印“请输入密码”字样
scanf获取键盘上的字符存入变量password
打印“请确认密码(Y/N)”
getchar(此处的作用为消除\n的影响)后面会讲解
第二个getchar是获取用户输入的Y或N存入变量ch中
if分支语句,条件为ch==‘Y’,符合就打印“确认成功!”
不符合则打印“确认失败!”
接下来详细说一下关于getchar有几个注意的点
在getchar和键盘之间是有一个缓冲区的
键盘上的字符先进入缓冲区,经过一段时间后,getchar是从缓冲区获得字符的
例如输入密码输入“123456”然后点击回车才会使scanf发生作用
此时的缓冲区中是“123456\n”
但是scanf只会获取数字,即123456,会留下\n在缓冲区
如果只有上面代码的第二个getchar的话,\n就会把Y的位置替代掉,会直接显示“确认失败!”
所以会提前放一个getchar去获取那个\n
对于getchar,在学习初期我有一个这样的疑问:
对此,经过学习与思考,我有了理解:
getchar到底是一个什么东西?
getchar你可以把它想成它只负责获取字符,就一直留在那里不发生作用,除非你把获取的字符存进一个变量,然后下面的内容会使用变量,那他就有了作用
那它获取了\n,为什么没有在执行时换行呢?
想要它显示在执行结果的话得使用putchar,putchar是让它输出,为此我也做了验证:
创建变量a
将获取\n的getchar存入边变量a中
putchar(a),在执行结果会发现确实多了一个换行
![](https://i-blog.csdnimg.cn/blog_migrate/9cce3b71cdffa5469aa2edb2b92f1a56.png)
注意:
还会有一种情况,我会输入“123456 abcdef”中间有空格,还多了几个字母
scanf会获取数字,第一个getchar或消除空格,但后面的abcdef\n该怎么办?
这次就要用到while循环了
![](https://i-blog.csdnimg.cn/blog_migrate/95f368cae317a33e746a790774b65b06.png)
创建变量tmp
while循环条件为getchar获取缓冲区的字符直到遇到\n
直到遇到\n后,条件为假,跳出循环
源代码
int main()
{
/*int a = 0;*/
int password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", &password);
printf("请确认密码(Y/N):>");
int tmp = 0;
while ((tmp = getchar()) !='\n')
{
;
}
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功!");
}
else
printf("确认失败!");
return 0;
}
总结
以上就是本人对于循环语句while的学习与理解