谁知道这是怎么回事啊,求解答

img


我写的和温凯老师上课讲的程序写的一样啊,为什么case后面不能加常量MRN,用的dev c++

【以下回答由 GPT 生成】

问题的原因在于C语言的switch语句中,case后面只能使用常量表达式,而不能使用变量或者常量。

在C语言中,常量表达式是编译时可计算出结果的表达式,而变量是在运行时根据输入或其他条件确定的。常量表达式的计算结果必须在编译时就能确定,但变量的值只有在运行时才能确定。所以在switch语句的case后面只能使用编译时可以确定的整数值。

在你的代码中,MRN虽然是一个常量,但它的值是在运行时根据const修饰符初始化的,所以它并不是一个编译时常量表达式。因此,你不能将MRN作为case的值。

解决这个问题的一种方法是将MRN改为宏定义,例如:

#include<stdio.h>
#define MRN 2

int main(){
    int type;

    scanf("%d",&type);

    switch(type){
        case 1:
            printf("你好");
            break;
        case MRN:
            printf("早上好");
            break;
        case 3:
            printf("晚上好");
            break;
        case 4:
            printf("再见");
            break;
        default:
            printf("啊,什么啊?");
            break;
    }
}

在这个代码中,MRN被定义为宏,它在编译时会被直接替换为2,所以case MRN就等同于case 2。

另外,你也可以使用if-else语句来替代switch语句,这样就可以使用变量作为判断条件:

#include<stdio.h>

int main(){
    int type;
    const int MRN=2;

    scanf("%d",&type);

    if(type==1){
        printf("你好");
    } else if(type==MRN){
        printf("早上好");
    } else if(type==3){
        printf("晚上好");
    } else if(type==4){
        printf("再见");
    } else {
        printf("啊,什么啊?");
    }
}

这样,你就可以使用变量MRN作为判断条件了。但需要注意的是,如果有很多选项,使用switch语句可能会更清晰和简洁。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

这种把常量作为label的语法,不是所有的编译器都支持