1

您好,我已经在这里坐了很长时间,试图弄清楚为什么这不起作用,但我没有成功!

#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;
    }
}    
4

3 回答 3

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) { ... }
于 2013-11-01T14:43:54.777 回答
1

来自 K&R:

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

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

对于你想做的事情,你需要 if/else。另外,请参阅 jaap 对布尔语句正确语法的回答。

于 2013-11-01T14:46:24.793 回答
0

它工作正常,编译器阻止您编译无效的 C 内容。

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

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

于 2013-11-01T14:43:52.687 回答