测试case后面能否使用&&、||

答案是不能 


#include<stdio.h>//测试case后面能否使用&&、||
int main()
{
	int a = 0;
	scanf("%d", &a);
	switch(a)
	{
	case 1 && 2:
		printf("hehe");
		break;
	case 3 || 4:
		printf("haha");
		break;

	}
	return 0;
}

在我测试case后面的整形常量表达式中能否使用&&、||,能使用,但出现问题,代码中第二个 case 后面用 || 的话会提示错误 case 的标签已出现在此开关.

            

                                                 只用一个数字的话就不会报错 

#include<stdio.h>//测试case后面能否使用&&、||
int main()
{
	int a = 0;
	scanf("%d", &a);
	switch(a)
	{
	case (1 && 2):
		printf("hehe");
		break;
	case 4:
		printf("haha");
		break;

	}
	return 0;
}

但问题来了,虽然第二个没有报错,可如果尝试对第二个代码进行输入的话会发现,输入 1 ,打印 hehe, 输入 2 ,却不打印任何东西,而我们逻辑上是同时输入 1 和 2 才打印 hehe,并且如果对代码进行添加 default 则会发现输入 2 ,打印的是 xixi

同理,把 && 换成 || 得到的结果也是一样的

#include<stdio.h>//测试case后面能否使用&&、||
int main()
{
	int a = 0;
	scanf("%d", &a);
	switch(a)
	{
	case (1 || 2):
		printf("hehe");
		break;
	case 4:
		printf("haha");
		break;
	default:
		printf("xixi");


	}
	return 0;
}

结论:从以上现象可以看出,不论编译器是否报错,case 后面的常量表达式中都不能包括 && 和 || ,或者说,对于 && 和 || 及其后面的值,编译器都会选择忽略,并且还会因某种原因导致后面 case 标签的报错

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值