求解一道C语言基础题?
我想问一下,下面代码switch中,为什么有下面那3个break才是正确的,去掉就是错误的呢?
int balance_symbol(char *s)
{//符号配对判断,若配对,返回值为1,否则返回值为0
PLinkStack L;
L=createNullStack_link( );
int len;
len=strlen(s);
int i;
for(i=0;i<len;i++)
{
char x=s[i];
switch(s[i])
{
case '(':
case '{':
case '[':
push_link(L ,s[i]);
break;
case ')':
if(pop_link(L)!='(') return 0;
// break;有才是正确的?没有是错误的。
case '}':
if(pop_link(L)!='{') return 0;
//break;有才是正确的?没有是错误的
case ']':
if(pop_link(L)!='[') return 0;
//break;有才是正确的?没有是错误的
}
}
return 1;
} 展开
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int GetPrime(int a[], int b[], int n) {
int C = 0;
for(int i = 0; i < n; i++) {
int j;
if(a[i] == 1 || a[i] % 2 == 0)
continue;
for(j = 2; j * j <= a[i]; j++)
if(a[i] % j == 0)
break;
if(j * j > a[i])
b[C++] = a[i];
}
return C;
}
int main() {
int a[20], b[20], n;
srand(time(NULL));
for(int i = 0; i < 20; i++)
a[i] = rand() % 99 + 1;
n = GetPrime(a, b, 20);
printf("原始数组:\n");
for(int i = 0; i < 20; i++)
printf("%d%c", a[i], i % 5 == 4 ? '\n' : ' ');
if(n == 0)
printf("\nNO");
else {
printf("\n素数数组:\n");
for(int i = 0; i < n; i++)
printf("%d%c", b[i], i % 5 == 4 ? '\n' : ' ');
}
putchar('\n');
return 0;
}
比如,对于:[()]
当扫描到)时会执行case ')':弹出(,然后继续下一个case '}':,这时if会弹出[,因'['!='{'会返回0,但实际括号是匹配的。
为什么会继续执行下一个case '}'呀?条件不是不满足吗?
只要有一个case满足条件就从此进入,如果此case没有break,下面的case就不再判断是否满足条件了,会直接进入,直到有一个case有break,才从此case退出。
switch语句的功能就是如此。
没有break跳出,程序会顺序执行下一行的代码,不会自行跳出switch结构
但是有啥关系呀?如果执行了某个case条件中的语句,下面的case那不就不符合条件了吗?那不是也相当于break?