条件与循环中的细节

本文详细解析了C语言中的条件与循环控制结构,包括switch-case的使用细节、while与for循环中的continue语句区别,以及goto语句的独特用途。通过具体代码示例展示了这些控制结构的正确使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 条件语句

switch case的细节

switch() 中的内容必须是整形变量或整型表达式,而case 后接整形常量或整形表达式

case中如果不加break,则程序从case入口一直运行到switch结束,否则遇到break停止。

switch()允许套用使用

注意使用default

一段代码进行解释

#include <stdio.h>

int main()
{
	int i = 0;
	int a = 0;
	for (; i < 3; i++)
	{
		printf("请输入:");
		scanf("%d", &a);
		switch (a + 1)
		{
		case 1:
			printf("%c\n", '1');
		case 2:
			printf("%c\n", '2');
		case 3:
			printf("%c\n", '3');
			break;
		case 4:
			switch (i)
			{
			case 0:
				printf("第0次打印\n");
				break;
			case 1:
				printf("第1次打印\n");
				break;
			case 2:
				printf("第2次打印\n");
				break;
			default:
				break;
			}
			printf("%c\n", '4');
		case 5:
			printf("%c\n", '5');

		default:
			break;
		}
	}	
	return 0;
}

运行结果:
在这里插入图片描述

2 循环语句

2.1 while和for中的continue

  for中遇到continue会进入调整语句;而while中的continue直接进入判断,会造成死循环。举例来说!

#include <stdio.h>
int main()
{
	int a = 0;//初始化
	while (a < 10)//判断语句
	{
        //改进的方法是将 a++ 移到这里(continue之前)。但是会造成a == 0时的条件消失,因为a自增了1。 并且增加了a == 10 的条件
		if (9 == a)
			continue;   //当a == 9 时,continue会使得下面的代码不执行,而是会回到while的判断。
        				//此时a总为9,原因是 a++ 不再被执行,造成死循环。
		printf("%d\n", a);
		a++;//调整语句
	}
	return 0;
}

  同样do...while语句仍会产生相同的问题。与while不同的是,程序首先会执行do{}中的内容,再进行while()里的判断,即如论如何,代码总是会被执行一次。一段错误代码进行说明continue的问题:

#include <stdio.h>
int main()
{
	int a = 0;//初始化
	
	do
	{
		if (3 == a)
			continue;
		printf("%d\n", a);
		a++;
	} while (a < 10);
	
	return 0;
}

for循环规避了以上的问题:

#include <stdio.h>
int main()
{
	int a = 0;
    //for(①;②;③) ①初始化; ②判断语句;③调整语句
    //for循环避免了while_continue死循环的问题,因为在执行continue语句后,代码会首先执行 ③调整语句 
    //类似于以上将a++放到while循环第一句的做法,但是a == 0的条件不丢失,也不会使 a == 10 出现在for循环内。
	for (a = 0; a < 10; a++)
	{
		if (9 == a)
			continue;
		printf("%d\n", a);
	}
	return 0;
}

运行结果:
在这里插入图片描述

2.2 关于for语句

//for(①;②;③) ①初始化; ②判断语句;③调整语句
  • 1、关于for循环()包含的初始化、循环判定条件、调整三个语句,都可以省略;但当 ②判断语句 被省略时,会产生类似 while(1) 的用法,即产生死循环。
  • 2、①;②;③ 可以内含多条语句,例如:
#include <stdio.h>
int main()
{
	int a = 0;//初始化
	int b = 0;
	for (a = 0, b = 2; b = 0; a++, b++)
	{
		printf("%d\n", a);
	}
	return 0;
}

以上代码的运行结果为:
在这里插入图片描述
tip: 可以看到当判断语句执行赋值操作 b = 0 时,循环判定为,循环结束;若修改b赋值为任意非零的值时,将产生死循环。

2.3 goto的使用技巧

  使用goto语句可以实现跳出两层乃至多层的循环,这是break达不到的,因为break只能跳出本层的循环。

#include <stdio.h>

int main()
{
	int a = 0;
	int b = 0;
	while (1)
	{
		a++;
		while (1)
		{
			b++;
			if (10 == b)
				goto end;
		}
	}
end:
	printf("goto entrance:a = %d , b = %d\n", a, b);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值