很多实际问题中有很多有规律的重复运算,所以程序中需要重复一些语句。一组重复执行的语句称为循环体。C语言中的while语句可以是单个语句,也可以是语句块,其条件可以是任意表达式,true是任意非零值。当条件为真时,循环迭代。
目录
1、while语句结构2、代码示例在学习和复习这些知识之前,我们已经掌握了if语句的结构和用法。
如果(条件)
声明;
满足条件时,if结构中的语句只执行一次;如果条件不满足,就不执行。但是,在生活中,往往需要多次完成一件事。这时候就需要使用while语句来实现循环。
1、while语句结构
While(表情)
循环语句;
示例:用圆形结构打印1-10
#包含stdio.h
int main()
{
int I=0;
while(i 10)
{
我;
printf('%d ',I);
}
返回0;
}
1 2 3 4 5 6 7 8 9 10
让我们分别测试一下在代码中添加continue和break的结果。
在while循环中,break用于永久终止循环。
int main()
{
int I=1;//初始化
While (i=10) //判断部分
{
如果(i==5)
打破;
printf('%d ',I);
我;//循环变量的调整部分
}
返回0;
}
运行结果是:
1 2 3 4
改break继续,发现运行结果是:
输出4后,光标一直闪烁,因为在while循环中,continue的作用是跳过这个循环中continue之后的代码(从而跳过printf('%d ',I);我;这两条语句),直接程序再次到判断部分,看是否进行下一个循环。
2、代码示例
示例1:
看看下面的代码是什么意思。
int main()
{
int ch=0;
while ((ch=getchar())!=EOF)
putchar(ch);
返回0;
}
运行结果如下:
你输入的任何字母都会被输出。要退出程序,请使用快捷键“ctrl z”。
a
a
A
A
Z
Getchar这意味着如果读取成功,它将返回ASCII码值;如果读取失败,将返回EOF(文件结束),这是文件结束标记。
测试getchar的功能。
int main()
{
int ch=getchar();
printf('%c\n ',ch);
//putchar(ch);//此语句与前一个语句的含义相同
返回0;
}
运行测试代码,在打印结果的窗口中,键入一个A字符,回车,A字符就打印出来了。(putchar表示输出一个字符)
getchar和keyboard之间有一个缓冲区。键入字符“A”相当于将“A\n”放入缓冲区。
示例2:
假设你输入一个字符作为密码,将密码存储在字符串passwd中,然后会弹出“请确认密码”的提示。如果确认密码正确,输入“Y”,输出“确认成功”;否则,键入“n”并输出“确认失败”。编写的代码如下:
int main()
{
char passwd[20]={ 0 };
Printf('请输入密码:');
scanf('%s ',passwd);//假设输入的密码是2022
//这里passwd不取地址的原因是passwd是一个数组,数组的数组名本身就是一个地址,所以
//此处没有添加到passwd的地址提取字符
Printf('请确认密码(Y/N):');
int ch=getchar();
if (ch=='Y ')
{
Printf('确认成功\ n ');
}
其他
{
Printf('确认失败\ n ');
}
返回0;
}
运行这段代码的结果如下:
请输入密码:2022。
请确认密码(是/否):确认失败。
显然,这段代码有错误。在输入Y/N之前,系统会提示您确认失败。这是为什么呢?因为我们在键盘上输入“2022”之后,还会输入一个回车。此时,“2022\n”被放入缓冲区。
Scanf和getchar是输入函数。他们不是直接从键盘获取数据,而是从中间缓冲区获取数据。如果缓冲区中没有数据,它将等待来自键盘的一点信息输入到缓冲区中。Scanf只会从缓冲区中的“2022\n”中取“2022”,“\n”保留在缓冲区中;Getchar在读取时没有等待就直接从缓冲区取\n \了,所以我们在输入y/n之前打印了“确认失败”。
如何修复程序?
执行scanf后将缓冲区中的“\n”拿走,即清理缓冲区,这样getchar函数将不得不等待输入并正确运行。
代码如下:
int main()
{
char passwd[20]={ 0 };
Printf('请输入密码:');
scanf('%s ',passwd);//假设输入的密码是2022
Printf('请确认密码(Y/N):');
//清理缓冲区
getchar();//句柄' \n '
int ch=getchar();
if (ch=='Y ')
{
Printf('确认成功\ n ');
}
其他
{
Printf('确认失败\ n ');
}
返回0;
}
运行结果是:
请输入密码:2022。
请确认密码(是/否):是
确认成功
这对于连续的密码输入是正确的,但是对于不连续的(中间有空格)呢?
例如,密码为“2022 abc”,执行结果如下:
请输入密码:2022 abc
请确认密码(是/否):确认失败。
可见节目还是有瑕疵的。那么如何应对呢?有必要清理缓冲区中的所有字符。此时,只有一个getchar函数无法摆脱空格和\n,所以可以使用while循环使其一直读取,直到读取完所有\n。
int main()
{
char passwd[20]={ 0 };
Printf('请输入密码:');
scanf('%s ',passwd);//假设输入的密码是2022
Printf('请确认密码(Y/N):');
清洁缓冲器。
//getchar();//句柄' \n '
//清除缓冲区中的多个字符
int tmp=0;
while ((tmp=getchar())!='\n ')
{
;
}
int ch=getchar();
if (ch=='Y ')
{
Printf('确认成功\ n ');
}
其他
{
Printf('确认失败\ n ');
}
返回0;
}
请输入密码:2022 abc
请确认密码(是/否):是
确认成功
示例3:
//只打印数字
int main()
{
int ch
while ((ch=getchar())!=EOF)
{
if (ch '0' || ch '9 ')
继续;
putchar(ch);
}
返回0;
}
根据ASCII码值可以知道这个码的意思:如果不是数字,继续。执行continue会跳过语句putchar(ch),所以这段代码最后只会打印输入的数字。如果要终止操作,只需键入“ctrl z”。代码运行如下:
一个
一个
三
三
九
九
Z
这就是这篇关于解释while循环语句用法的C语言示例的文章。更多相关的C语言while循环内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。