【问题标题】:Prime Number Counter Using Switch Statement (Error in Output)?使用 Switch 语句的质数计数器(输出错误)?
【发布时间】:2014-02-06 22:04:36
【问题描述】:

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

【问题讨论】:

    标签: c function switch-statement primes


    【解决方案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函数时要注意一点:如果你在函数参数上使用它,它会因为“指针衰减”而失败,这个话题值得一读。

    【讨论】:

      【解决方案2】:

      您缺少break 语句,因此只要它匹配其中一种情况,它就会通过以下所有情况。

          switch(X[i]) {
              case 2:count++;break;
              case 3:count++;break;
              case 5:count++;break;
              case 7:count++;break;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-05
        • 2019-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多