Switch语句没有编译

时间:2013-11-01 14:40:11

标签: c switch-statement

您好我一直坐在这里一段时间试图弄清楚为什么这不起作用但我没有运气成功!

#include <stdio.h>

main(void)
{
    int mark;

    printf("Please enter the mark\n");
    scanf("%d", &mark);

    switch(mark){
        case (mark <40):
            printf("That's a fail");
            break;
        case (mark >=40 && <60):
            printf("That's a pass");
            break;
        case (mark >=60 && <70):
            printf("That's a merit");
            break;
        case (mark >=70):
            printf("That's a distinction");
            break;
    }
}    

3 个答案:

答案 0 :(得分:4)

对于未知确切值的比较,请使用if-else块。您正在尝试使用if-else块之类的switch语句,但它无法正常工作。正确的开关看起来像

switch(mark) {
case 40: //if mark is 40, no more, no less
  ...
case 60: //same
 ...
}

因为你不想写出所有导致同一语句的40行,所以只需使用

if(mark < 40) { ... }
else if(mark < 60) { ... }

答案 1 :(得分:1)

来自K&amp; R:

“switch语句是一个多方决策,用于测试表达式是否匹配多个常量整数值之一,并相应地进行分支。”

也就是说,你无法做你想做的事。每个case都需要一个常量语句,如一个简单的int或char值。

如果你想做什么,你需要if / else。另外,请参阅jaap关于布尔语句的正确语法的答案。

答案 2 :(得分:0)

它运行正常,编译器阻止您编译无效C的东西。

case标签必须是实际的整数常量,而不是进行进一步计算的表达式。

您应该使用if / else if来检查各种条件。