C程序使用switch case

时间:2017-02-11 16:22:19

标签: c

/* C program to find maximum between two numbers using switch case */

#include <stdio.h>

void main() {
    int m, n;
    printf("\nEnter the first number\n");
    scanf("\n%d", &m);
    printf("\nEnter the second number\n");
    scanf("\n%d", &n);

    switch (m > n) { /* it will give result either as 0 or 1*/
      case 0:
        printf("\nThe greater number is %d\n", n);
        break;
      case 1:
        printf("\nThe greater number is %d\n", m);
        break;
      default:
        printf("\nBoth number's are same\n");
    }
}

我收到错误消息,指出switch条件具有布尔值。

请帮帮我,我哪里错了?

2 个答案:

答案 0 :(得分:2)

m > n对于switch来说是一个不寻常的控制表达式。允许的值为1m > n时)或0m <= n时)。发出警告,因为您定义了多余的default标签,该标签被视为超出范围。

GCC documentation(强调我的)中描述了-Wswitch-bool警告:

  

switch语句具有布尔类型的索引和时,警告   大小写值超出布尔类型的范围。有可能   通过将控制表达式转换为类型来禁止此警告   除了布尔之外。

要涵盖所有三种情况,您可以使用不同的比较表达式:

switch ((m > n) - (m < n)) {
    case -1: // m < n
    case  1: // m > n
    case  0: // m == n
}

答案 1 :(得分:2)

这是你应该只是if语句的问题,但是如果你设置使用switch case:你的检查只能告诉你你的变量m是否大于n,而不是它们是否相等。如果m更大,switch ((m > n) + (m >=n))将给出2,如果它们相等则为1,如果n更大则为0。