Prime数字计数器使用Switch语句(输出错误)?

时间:2014-02-06 22:04:37

标签: c function switch-statement primes

为什么在每个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;
}

2 个答案:

答案 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;
    }