while循环
while(表达式){ //当表达式为真,执行循环体
循环体
}
break:
- 永久的结束整个循环
int i = 1;
while (i <= 10)
{
if (5 == i)
{
break;
}
printf("%d ", i); // 1 2 3 4
i++;
}
continue:
- 跳过本次循环continue后面的代码,直接转到判断表达式部分(while 表达式)对能否执行下一次循环进行判断
int j = 1;
while (j <= 10)
{
if (5 == j)
{
continue;
}
printf("%d ", j); // 1 2 3 4 死循环中
j++;
}
int k = 1;
while (k <= 10)
{
k++;
if (5 == k)
{
continue;
}
printf("%d ", k); // 2 3 4 6 7 8 9 10 11
}
含getchar()和putchar()的循环案例
- 使用getchar()和putchar()需要引用头文件# include <stdio.h>
- getchar() 不会忽略起⾸的空⽩字符,总是返回当前读取的第⼀个字符,⽆论是否为空格。如果读取失败,返回常量EOF,由于EOF通常是 -1 ,所以返回值的类型要设为int,⽽不是char
int ch = getchar(); - putchar() 函数将它的参数字符输出到屏幕,等同于使⽤ printf() 输出⼀个字符。操作成功时, putchar() 返回输出的字符,否则返回常量EOF
int ch = getchar();
// 等同于 scanf("%c",&ch);
putchar(ch);
// 等同于printf("%c\n", ch);
一个例子,当密码是连续的如abcdef,不会等待用户输入确认密码而是会直接打印NO
char password[20] = {0};//存的是密码如abcdef
printf("请输入密码:");
scanf("%s", password);
printf("请确认密码(Y/N):");
int res = getchar();//拿到的是输入密码后按的回车键\n,所以会直接打印NO
if ('Y' == res)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
return 0;
上面例子的优化,当密码中有空格如sdegh eyhj要怎么解决
char password[20] = {0}; // 存的是密码,只有sdegh
// 因为这是因为 scanf的%s格式符默认以空白字符(包括空格、换行、制表符)作为分隔符
printf("请输入密码:");
scanf("%s", password);
// 优化:
int ch = 0;
while ((ch = getchar()) != '\n')
{
; // 将输入缓冲区中多余的字符即 eyhj\n清楚掉这样就可以用用户输入的'Y'或'N'来输出结果
}
printf("请确认密码(Y/N):");
int res = getchar();
if ('Y' == res)
{
printf("YES\n");
}
else
{
printf("NO\n");
}