/* 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
条件具有布尔值。
请帮帮我,我哪里错了?
答案 0 :(得分:2)
m > n
对于switch
来说是一个不寻常的控制表达式。允许的值为1
(m > n
时)或0
(m <= 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。