我们已经掌握了if语句,当满足条件时,if语句后的语句执行,否则不执行。但这个语句只会执行一次。我们生活中很多实际的例子是,同一件事我们需要完成多次。那我们该怎么做呢?C语言给我们引入了while语句,可以实现循环。
语法结构
while(表达式)
循环语句;
例子:
int main()
{
int i = 1;//初始化
while (i <= 10)//判断部分
{
printf(“%d”,i);
i++;//调整部分
}
}
0为假,expr为判断,stmt为语句。
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;
printf(%d\n,i);
i++;
}
}
最终的结果是1 2 3 4
由此,我们可知在while循环中,break用于永久的终止循环。
int main()
{
int i = 1;
while (i <= 10)
{
if (i = 5)
continue;
printf(“%d\n,i”);
i++;
return 0
}
最终的结果是1 2 3 4 死循环
由此,我们可知在while循环中,continue的作用是跳过本次循环continue后边的代码,直接去判断部分,看是否进行下一次循环。
//代码什么意思
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) !=EOF)
putchar(ch);
return 0;
}
getchar--获取字符 putchar--输出一个字符 EOF--文件结束符 !--not
getchar要获取字符,字符通过从键盘上输出,键盘上敲出字符时,会把字符放在缓冲区中,getchar则会从缓冲区里读取字符。
键盘上输入A,缓冲区则会出现A\n。
int main()
{
char password[20] ={ 0 };
printf(“请输入密码:>”);
scanf(“%s”,password);//123456
printf(“请确认密码(Y/N):>”);
int ch = getchar();
if (ch == ‘Y’)
{
printf(“确认成功\n”);
}
else
{
printf(“确认失败\n”);
}
return 0;
还没有选择Y和N,就出现了确认失败。
scanf和getchar都是从缓冲区获取,当键盘上输入123456时,缓冲区则出现123456\n,当输入123456时,scanf会获取缓冲区中的123456,之后getchar发现缓冲区有\n,会获取\n,不符合(ch == ‘Y’),所以最终会直接打出确认失败。
int main()
{
char password[20] ={ 0 };
printf(“请输入密码:>”);
scanf(“%s”,password);//123456
printf(“请确认密码(Y/N):>”);
getchar();//处理'\n',清理缓冲区
int ch = getchar();
if (ch == ‘Y’)
{
printf(“确认成功\n”);
}
else
{
printf(“确认失败\n”);
}
return 0;
这是就会满足我们的需求。但是,这样也会出问题,当我们输入的密码时123456 acbcdef时,就会和开始一样还没有选择Y和N,就出现了确认失败。
这是因为scanf一次会读取空格前的东西,而且getchar只能处理一个字符,所以才出现上面的结果。
int main()
{
char password[20] ={ 0 };
printf(“请输入密码:>”);
scanf(“%s”,password);//123456
printf(“请确认密码(Y/N):>”);
int tmp = 0 //清理缓冲区中的多个字符
while ((tmp = getchar()) !=‘\n ’)
{
;
} //相当于没读到\n就什么事都不干,继续循环;读到\n就跳出循环
int ch = getchar();
if (ch ==‘Y’)
{
printf(“确认成功\n”);
}
else
{
printf(“确认失败\n”);
}
return 0