目录
while循环
语法结构:
break。
continue。
getchar()
缓冲区
清理缓冲区
for循环
break与continue
do while循环
与while的区别
while循环
我们之前了解了if语句,当条件满足的情况下,if语句后的语句执行,否则不执行。 但是这个语句只会执行一次。
由于我们生活中很多的实际的例子是:同一件事情我们需要完成很多次。 那我们怎么做呢?
C语言中给我们引入了: while 语句,可以实现循环。
语法结构:
while(表达式)
循环语句;
表达式若为真,则执行循环语句。为假则不执行。
例:打印数字1~10。
int main()
{
int i = 1;
while (i <= 10)
printf("%dn", i);
i = i + 1;
return 0;
};
break。
如果我们想要终止循环的话,我们可以引入关键字break。
我们发现,当打印到4的时候,代码停止运行了。在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的。
continue。
我们将上述代码中的break替换成continue,运行代码。
我们发现,同样是打印到4便停止了,但是程序并没有停止,因为此时程序进入了死循环。
continue的作用是:跳过continue后这次循环的代码。直接去判断部分。看是否进行下一次循环。
因为跳过了i++,所以i的值一直为5,代码因此进入死循环。
getchar()
作用:获取字符
方法:从stdin(标准输入 -- 键盘)获取一个字符。读到错误,返回EOF。EOF全称end of file,是文件结束标志。
结束:getchar的结束 -- ctrl+z。
我们观察如下代码:
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
//printf("%cn", ch);
putchar(ch);
}
return 0;
};
此时我们在键盘输入什么,控制台便会打印与我们输入相同的字符。
注意:之所以我们可以使用int类型的ch接受键盘上的字符,是因为getchar获取到键盘上的字符后,返回的值是其对应的ASCII码值。
缓冲区
为了方便了解缓冲区的概念,我们还是先观察一段代码
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%S", password);
printf("请确认密码(Y/N):>");
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功n");
}
else
{
printf("确认失败n");
}
return 0;
};
我们随意输入一段字符串123456并点击回车
我们发现代码自动判断确认失败并停止运行了,这是为什么呢。
为了解决这个问题,我们来了解一下缓冲区:
我们在键盘输入123456之后,由于我们点击了回车,所以此时我们在在缓冲区存放的是123456n。
当代码执到scanf时
scanf拿走了123456存放到passwor中,此时缓冲区还有n的存在。
所以当代码执行到getchar时,getchar拿走了n存放在ch中。
if语句判断n不等于Y,输出确认失败,代码结束。
所以我们需要进行清理缓冲区
清理缓冲区
我们在scanf之后再添加一个getchar(),其作用就是提前拿走n。
运行一下:
我们发现n被顺利清理掉了。
那如果我们输入的password中存在空格该怎么办呢?
我们发现又是之前的问题,是因为scanf只会拿走空格之前的字符,下的继续往下走。如何解决这个问题呢?一样的原理,我们使用一个while循环来解决这个问题。
int tmp = 0;
while ((tmp = getchar()) != 'n')
{
;
}
这段代码的含义是,我们初始一个变量tmp,将while循环中getchar获取的值赋给tmp,并判断是否与n不相同,如果不相同则不做任何处理,进入下一次循环,直到getchar拿走了缓冲区所有的字符,循环结束,运行一下。
问题解决。
for循环
for(表达式1; 表达式2; 表达式3) 循环语句;
表达式1:初始化部分,用于初始化循环变量的。
表达式2:为条件判断部分,用于判断循环时候终止。
表达式3:为调整部分,用于循环条件的调整。
例子:使用for循环 在屏幕上打印1-10的数字。
int main()
{
for (int i = 0; i <= 10; i++)
{
printf("%dn", i);
}
return 0;
};
break与continue
与while循环作用一致。
注意:
不可在for 循环体内修改循环变量,防止 for 循环失去控制。
do while循环
打印0~10
int main()
{
int i = 0;
do
{
printf("%d ",i);
i++;
} while (i <= 10);
return 0;
};
与while的区别
一个是先执行后判断,一个是先判断后执行。



