Switch语句未编译

Switch语句未编译,c,switch-statement,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");

你好,我已经在这里坐了很长一段时间,试图找出为什么这不起作用,但我没有成功的运气

#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;
    }
}    
#包括
主(空)
{
整数标记;
printf(“请输入标记\n”);
scanf(“%d”,标记(&M);
开关(标记){
案例(mark=40&&=60&&=70):
printf(“这是一种区别”);
打破
}
}    

它工作正常,编译器阻止您编译无效的C语言

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


您应该使用
if
/
else if
检查您的各种情况。

工作正常,编译器阻止您编译无效的C

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


您应该使用
if
/
else if
来检查各种情况。

对于精确值未知的比较,请使用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) { ... }
if(标记<40){…}
如果(标记<60){…}

对于精确值未知的比较,请使用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) { ... }
if(标记<40){…}
如果(标记<60){…}
来自K&R:

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

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

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

来自K&R:

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

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


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

当你说“不起作用”时,你的确切意思是什么?好吧,我必须诚实地说:DIt在编译器中产生了一个错误,供将来参考,可能还包括编译器错误。你也可以在谷歌上搜索错误,也许还能找到答案。使用if/else buddy,当你说“不起作用”时,你的意思是什么?好吧,我必须诚实地说:DIt在编译器中产生了一个错误,将来参考可能也会包括编译器错误。你也可以在谷歌上搜索错误,或许也能找到答案switch@SzymonZmudzki如果这对你有帮助,考虑点击答案旁边的复选标记。@ SzymonZmudzki,如果这对你有帮助,考虑点击答案旁边的复选标记。