switch 语句 case 后面千万别忘了break (C语言)

/* Program to evaluate simple expression of the form 
 * value operator value */

#include <stdio.h>

int main(void)
{
	float value1, value2;
	char operator;

	printf("Type in your expression .\n");

	scanf("%f %c %f", &value1, &operator, &value2);

	switch(operator)
	{
		case '+':
			printf("%.2f\n", value1 + value2);
			break;
		case '-':
			printf("%.2f\n", value1 - value2);
			break;
		case '/':
			if (value2 == 0)
				printf("Division by zero .\n");
			else
				printf("%.2f\n", value1 /value2);
			break;
		default:
			printf("Unknown operator.\n");
			break;
	}
	return 0;
}

预期的程序行为是这样的:

如果程序少了break:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	float value1, value2;
	char operator;

	printf("Type in your expression .\n");

	scanf("%f %c %f", &value1, &operator, &value2);
	__asm int 3;
	switch (operator)
	{
	case '+':
		printf("%.2f\n", value1 + value2);
		
	case '-':
		printf("%.2f\n", value1 - value2);
		break;
	case '/':
		if (value2 == 0)
			printf("Division by zero .\n");
		else
			printf("%.2f\n", value1 / value2);
		break;
	default:
		printf("Unknown operator.\n");
		break;
	}
	system("pause");
	return 0;
}

那么break 之前的代码都会跑到。

原因就是:

case 仅仅只是一个标签(label).

书上是这样说的:C Programming Language, 2nd Edition 2nd Edition by Brian W. Kernighan (Author), Dennis M. Ritchie (Author)

在switch 里面break 语言会导致一个immediate (迅速)的退出, 因为case 的作用相当于一个label, 当case 后面的代码跑完之后, 执行语言会继续往下走,除非遇到显式的动作去跳出来。 break 和return 是最常用的方式离开switch.  在while, for, do 循环里面, break 也经常用来立即退出。

猜你喜欢

转载自blog.csdn.net/robinsongsog/article/details/89604537
今日推荐