分支和循环(二)

while语句,for循环,do…while循环

一、while语句

(1)while语句结构

//while循环的实例:打印0到10
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int i = 0;
	while (i < 10)//括号内写条件,条件成立执行下一步(进入循环),
	{
		i++;
		printf("%d\n", i );
	}
	return 0;
}

(2)while语句中的break与continue

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;
		printf("%d\n", i );
		i++;
	}
	return 0;
}
//输出结果为1 2 3 4 说明循环在break之后就终止了

总结:其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//continue 代码实例1
int main()
{
	int i = 0;
	while (i < 10)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}
//输出结果输出1 2 3 4后陷入死循环
#include <stdio.h>
//continue 代码实例2
int main()
{
	int i = 0;
	while (i < 10)
	{
		i = i + 1;
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}
//输出结果输出1 2 3 4 6 7 8 9 10

总结:说明continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

3、getchar和putchar

getchar表示键盘输入读取字符,putchar表示键盘输出

//示例一
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int ret = 0;
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);
	printf("请确认:>Y/N");
	ret = getchar();
	if (ret == 'Y')
		printf("确认成功\n");
	else
		printf("放弃确认\n");
	return 0;
}

在这里插入图片描述
我们要思考,为什么我们输入密码后,直接就输出了。打开监视窗口,可以看到程序运行到scanf("%s", password);后直接跳到ret = getchar();并且ret=10。
解释——>scanf,getchar都是输入函数,读取数据时从一个叫输入缓冲区的地方取数据,当执行scanf后,我们需要输入密码(字符串),并按下回车才能使程序执行下一步,于是我们输入密码123456后我们按了回车,此时输入缓冲区实际得到’123456\n’的字符串,而不是’123456’,’\n’实际上就是回车,scanf取得字符串‘123456’,留了个‘\n’,getchar取得后赋值给ret,而’\n’的ASCLL码值就是10,于是ret = 10;ret得到了值,于是不会等待我们输入Y\N,而是直接进入if语句,且ret != ‘Y’,于是程序直接输出“放弃确认”。

为此,我们应该将输入缓冲区清空,使getchar不能得到‘\n’,因此程序应更改为:

//示例二
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int ret = 0;
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);
	//输入缓存区还剩一个'\n',
	//读取一个'\n',将输入缓存区清空
	getchar();
	printf("请确认:>Y/N");
	ret = getchar();
	if (ret == 'Y')
		printf("确认成功\n");
	else
		printf("放弃确认\n");
	return 0;
}

在这里插入图片描述
此时一个字符串的便能成功设置。但多个字符串能不能成功输出呢?联系上面分析,我们可以知道,多个字符串仍会失效,因为scanf取掉第一个字符串后,还会留下一个字符串和‘\n’,用上面的的代码,getchar会取得第二个字符串中的第一个元素,只要这个元素 != ‘Y’,依旧会直接输出结果。这时可以用while循环改进。

//最终成形代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int ret = 0;
	int ch = 0;
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);
	//在输入缓冲区一直取元素,直到输入缓冲区清空
	while(ch = getchar() !='\n');
	{
		;
	}
	printf("请确认:>Y/N");
	ret = getchar();
	if (ret == 'Y')
		printf("确认成功\n");
	else
		printf("放弃确认\n");
	return 0;
}

至此,代码功能完备。

二、for循环

(1)for循环举例

//while循环的实例:打印0到10
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int i = 0;//初始化部分 
	//判断部分
	while (i < 10)//括号内写条件,条件成立执行下一步(进入循环),
	{
		i++;// 调整部分
		printf("%d\n", i );
	}
	return 0;
}

在while语句中,变量初始化部分,判断部分,调整部分是分开的,当代码相当长时,不易于更改变量。于是我们引入一个新循环——for循环。for循环中
变量初始化部分,判断部分,调整部分链接在一起,更改方便。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//利用for循环打印1到10
int main()
{
	int i = 0;//定义变量
	//初始化部分  判断部分 调整部分 
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

(2)for循环中的break与continue

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//for中的break举例
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}

在这里插入图片描述
break在for循环中的作用与在while语句一样,均为跳出循环

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//for中的contiune举例
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

可以看到
可以看到程序能够运行,不会陷入死循环,这与while语句中的contiune效果不同。间接说明for循环相对while存在优势。

三、do…while循环

(1)do…while循环举例

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//do...while打印1到10
int main()
{
	int i = 0;
	do//先执行一次循环
	{
		printf("%d ", i);
		i++;
	} while (i <= 10);//注意分号
			return 0;
}

(2)do…while循环中的break与continue

do…while循环中的break与continue与while语句中的break与continue效果一致。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//do...while打印1到10
int main()
{
	int i = 0;
	do
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i++;
	} while (i <= 10);
			return 0;
}

在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//do...while打印1到10
int main()
{
	int i = 0;
	do
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i++;
	} while (i <= 10);
			return 0;
}
//程序输出1 2 3 4后陷入死循环。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值