1.循环语句
我们在日常生活中或是在程序所处理的问题中常常遇到需要重复处理的问题。在程序中,这就需要用到循环语句来帮助我们解决问题。C语言中循环语句有while语句、for语句和do while语句。相关语句详解如下。
1.1while语句
1.语法结构
代码实例演示:
例如打印数字1-10
#include <stdio.h>
int main()
{
int i = 1;//初始化
while(i<=10)//判断
{
printf("%d ", i);
i = i+1;//调整
}
return 0;
}
while语句通过对于括号内表达式真假的判断来确定是否进行循环。只要循环条件为真,就执行循环体语句。
2.while语句中的break和continue
先看一个例子 :
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i+1;
}
return 0;
}
使用这段代码产生一个结果,再把其中的break换成continue,再运行一次。结果如下:
break和continue的结果:
break输出了1234,continue变成了死循环。
这是因为:
3.while语句的一些实例
清理缓冲区
在展示代码前我们先来认识一个函数getchar()
通过搜索C语言库函数的网站可以更好地帮助我们了解和学习函数。通过检索得来的信息我们可以得知getchar函数的返回值是int类型(即返回字符的ASCII值),接收的值void,也就是不需要接收什么值。getchar一次读取一个字符。如果读取失败,就返回EOF(-1)。
C语言库函数网站链接:
https://legacy.cplusplus.com/
了解了这些看这段代码:
在得出结果之后,我们发现程序在屏幕上打印我们想要打印的字符之后光标还进行了换行。这是为什么呢???
原因在于当我们使用像getchar这类输入函数时,并不是直接从键盘获取字符的,而是涉及输入缓冲区的概念。
假设我们要输出字符B,当我们通过键盘输入B和回车时(输入回车触发字符进入输入缓冲区),此时输入缓冲区内有字符B和\n。getchar会先在输入缓冲区获取字符B,putchar输出B之后。这个时候输入缓冲区其实还有字符\n,getchar读取之后就进行了换行。
了解了关于getchar的工作原理,那么在程序中会产生什么问题呢?
这段代码并没有按照我的设想实现确认密码的操作,这就是getchar获取回车导致的。想更改这个问题,只需要确认密码之前在getchar一次即可。 结果如下:
在这个基础上在想一想,如果我们在输入密码的时候不小心输入了空格怎么办? 假设我们输入了123456 ABC 结果如下:
scanf在遇到空格就不会获取后面的字符,那么我们在中间加的getchar只能清除一个字符,后面的字母又会影响代码的正常进行。所以我们利用while语句,用循环的方式清除缓冲区。
更改的代码如下:
1.2for语句
1.语法结构
for(表达式1; 表达式2; 表达式3)
循环语句;
for语句和while语句同为循环语句,我认为不同的是for循环的初始化、判断和调整的表达式相比于while语句相对更加“紧凑”,更加方便查找修改。
代码实例演示:
打印1-10数字
#include <stdio.h>
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判断*/; i++/*调整*/)
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
2.for语句中的break和continue
break:
可以看出来for循环中的break和在while中起同样作用。
continue:
for循环里的continue和while运行出的结果不太一样,这是因为continue跳过的是本轮循环后面的代码,而for循环的i++(调整部分)并不在其中。
1.3do while语句
1.语法结构
do while的循环是至少进行一次的,这是和for语句和while语句不太一样。后者的判断部分如果为假就不会进入循环。
2.do while语句中的break和continue
break:
continue:
有了上面的经验,就知道这段代码为什么会出现死循环了吧!!!
总结:
讲解了循环语句的一些基本语法,以及break和continue在语句中的作用。