计算机学习DAY 15 - C - while语句

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0XC12EE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值