为什么在每个case语句之后放置count ++时,下面的代码给我25而不是10?另外,C中是否有内置函数来确定数组的长度,如Python?
#include <stdio.h>
#include <stdlib.h>
int count_prime(int X[], int size);
int main() {
int X[] = {4,5,3,7,9,65,17,8,7,4,2,5,6,8,5,3,3,245,10,9,4,2,9};
int size = 23;
count_prime(X,size);
return 0;
}
int count_prime(int X[], int size) {
int i;
int count=0;
for (i = 0; i < size; i++) {
switch(X[i]) {
case 2:count++;
case 3:count++;
case 5:count++;
case 7:count++;
}
}
printf("%d",count);
return count;
}
答案 0 :(得分:1)
您缺少break
语句,因此您为每个语句编写了直通(即:级联)代码。此外,您错过了一个default
案例,这个案例很糟糕,应予以纠正。切换这个:
switch(X[i]) {
case 2:count++;
break;
case 3:count++;
break;
case 5:count++;
break;
case 7:count++;
break;
default:
break;
}
最后,您可以通过替换:
使代码更安全一些int size = 23;
使用:
int size = sizeof(X) / sizeof(int);
使用sizeof
函数时要小心:如果您在函数参数上使用它,它将因“指针衰减”而失败,这是一个值得阅读的主题。
答案 1 :(得分:1)
您遗漏了break
条款,因此只要与其中一个案例相匹配,就会遇到以下所有情况。
switch(X[i]) {
case 2:count++;break;
case 3:count++;break;
case 5:count++;break;
case 7:count++;break;
}