okok上思维导图:
首先,引入一下,打印一下数字,代码如下:
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
i++;
}
return 0;
}
while什么意思,当,对吧,打印结果很明显,当i小于等于10的时候,打印并加1,OK结果明显:
嗯,不过多解释,10的时候再回去就不会再加了,所以到10就结束了,OK,next one:
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;
printf("%d ", i);
i++;
}
return 0;
}
结果是:
因为break跳出循环,所以到5的时候就跳出循环不打印了,简单易懂,下一个:
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;
printf("%d", i);
i++;
}
return 0;
}
打印结果呢是:
光标一直在闪烁说明一直在执行,为啥呢,这是一个死循环,执行到i=5到时候,继续执行,回到while,就会一直循环而不停止,造成死循环,好了,下一个:
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch=getchar())!=EOF)
{
putchar(ch);
}
return 0;
}
首先看一下getchar是个啥:
stdin是标准输入也就是键盘,然后返回int,看一下:
OK,简单明了,定义yyds,到这里,运行的结果显而易见:输入啥,返回啥:
那么我现在只是想输出数字,怎么办呢,代码如下:
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch=getchar())!=EOF)
{
if (ch<'0'||ch>'9')
{
continue;
}
putchar(ch);
}
return 0;
}
OK,这样就能只打印数字而不打印字母了,Ok试一下:
好的,现在可以看到只会返回数字而不返回字母了,这是因为在ASCII码表中,小于0,大于9代表的范围就是字母和符号,当你输入字母或者符号时候,会continue,返回while不去执行,而当输入数字时,则会打印,下面再来看一个案例:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
printf("请确认密码(Y/N):>");
getchar(); //清理缓冲区中的'\n'
int ch = getchar();
if (ch=='Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
平常我们设置密码的时候确认程序就是这个样子,当然是一个简化版,输入密码之后,直接确认不就行了?那么getchar()是干什么的?那就是用来清空缓存区的,我们输入密码后,点击回车,缓冲区会生成一个\n换行符,导致下一次输入或者确认的时候成为你的密码加\n,导致很多麻烦,当然,这个程序你如果输入密码是123456 abcdef,对,中间有个空格,读取一遍,会发现清理缓冲区不完整,只清除了123456,空格之后的还留在缓冲区。那么,我们该如何修改呢,代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
printf("请确认密码(Y/N):>");
//清理缓冲区的多个字符
int tmp = 0;
while ((tmp=getchar())!='\n')
{
;
}
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
但是我们定义临时变量tmp,当看到\n后,循环跳出,缓冲区所有字符清除完成,OK,任务完成。
相关代码我会同步到码云上,欢迎交流与学习:C语言学习之路: C语言学习当中做的相关代码 - Gitee.com