【问题标题】:How to stop switch statement if it is executing all other case in C? [closed]如果在 C 中执行所有其他情况,如何停止 switch 语句? [关闭]
【发布时间】:2018-05-28 08:26:39
【问题描述】:

问题

这个程序给出了奇数的错误结果,因为第二个 case 语句也每次都执行。请告诉我为什么会这样。

计划

#include <stdio.h>

int main() {

    int num,rem,te=0,to=0,e=0,o=0;
    float ae,ao;

    while (1) {

    printf("\nEnter Number : ");
    scanf("%d",&num);
    if (num==0) break;
    rem=num%2;
    switch (rem) {

        case 0 :
            te+=num;
            e++;

        case 1 :
            to+=num;
            o++;

    }
}   
printf("\nTotal of even numbers : %d",te);
printf("\nTotal of odd numbers : %d",to);
printf("\nTotal of number of even numbers : %d",e);
printf("\nTotal of number of odd numbers : %d",o);
printf("\nAverage of even no. : %f",ae=te/e);
printf("\nAverage of odd no. : %f",ao=to/o);        

getchar();
return 0;
}

输出:

输入数字:1

输入数字:2

输入数字:3

输入数字:4

输入数字:5

输入数字:6

输入数字:0

偶数总数:12

奇数总数:21

偶数总数:3

奇数总数:6

平均甚至没有。 : 4.000000

奇数的平均值。 : 3.000000

【问题讨论】:

  • 添加一个break; 这会有所帮助
  • te/e 将导致int,您已经丢失了小数点后的数字。如果您的目标是准确性,那么将其分配给 float 毫无意义。
  • 请投票,因为这不再是一个无效的问题。谢谢。

标签: c switch-statement case


【解决方案1】:

C 中的switch 具有跟踪 功能,这意味着程序控制会运行到您输入的情况下的情况。您可以使用break 语句取消该效果:

switch (rem){
case 0:
    te+=num;
    e++;
    break;
case 1:
    to+=num;
    o++;
}

在你的情况下,虽然你可以使用相当简单的

if (num % 2){
    to += num;
    ++o;
} else {
    te += num;
    ++e;
}

还要注意,您的平均值将以整数算术 计算。请改用1f * te / e,注意检查e 是否不为零。

【讨论】:

    【解决方案2】:

    在每个案例的末尾添加break;。

    switch (rem) {
    
        case 0 :
            te+=num;
            e++;
            break;
    
        case 1 :
            to+=num;
            o++;
            break;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2014-11-23
      • 2020-02-13
      • 1970-01-01
      相关资源
      最近更新 更多