案例标签在C中没有减少到整数常量?

2 c arrays label case switch-statement

我正在开发一个游戏,我运行了我的代码并得到错误"案例标签不会减少到一个整数常量." 我想我知道这意味着什么,但我该如何解决呢?这是我的代码:

#include<stdio.h>
#include<stdlib.h

int player_cash[3] = {50};
char job[][20] {
    'A',
    'B',
    'C',
    "Donate",
    "Go to work",
    "Exit"
};
int jobs;

int main()
{
    while(player_cash[0] > 0) {
        printf("Please type A, B, C, Donate, Go to work, or Exit\n");
        switch(jobs) {

            case 'A':
            player_cash[0]-=5;
            player_cash[1]+=5;
            printf("Cash=%i\n\n", player_cash[0]);
            continue;

            case 'B':
            player_cash[0]-=5;
            player_cash[2]+=5;
            printf("Cash=%i\n\n", player_cash[0]);
            continue;

            case 'C':
            player_cash[0]-=5;
            player_cash[3]+=5;
            printf("Cash=%i\n\n", player_cash[0]);
            continue;

            case "Donate":
            player_cash[0]-=15; //Error here
            player_cash[1]+=5;
            player_cash[2]+=5;
            player_cash[3]+=5;
            printf("Cash donated\n\n");
            printf("Cash=%i\n\n", player_cash[0]);
            continue;

            case "Go to work":
            player_cash[0]+=10; //Error here
            printf("Work done\n\n");
            printf("Cash=%i\n\n", player_cash[0]);
            continue;

            case "Exit":
            printf("Thanks for playing!\n\n"); //Error here
            break;

            default:
            printf("Does not compute");
            continue;
        }
    }
        getchar();
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

因此,我希望用户做的是键入其中一个选项,并执行与其对应的操作.我该如何解决?

pb2*_*b2q 7

您不能将字符串用作case表达式:

case "Donate":
Run Code Online (Sandbox Code Playgroud)

只能使用整数表达式,所以例如case 'A':可以.

从概念上讲,你遇到了问题:jobsint,你正在测试字符串.如果你想允许用户输入字符串(多个单个字符),你需要保留一个字符串变量,并使用类似的东西fgets来获得一整行输入.