在 Switch 语句中使用字母

using letters in a Switch statement

我尝试在 switch 语句中使用 Y 和 N,但是当我尝试编译它时出现错误,内容是“错误:语句需要整数类型的表达式('char [0]' 无效) 开关(xx){ “

我也得到了一个警告“警告:不兼容的指向整数转换的指针将 'char [1]' 传递给 'char' 类型的参数 [-Wint-conversion] sucheZechen(name, imya); “

int main() {

char name[200];

printf("Please tell me your name:");
fflush(stdin);
scanf("%s", name);
printf("%s has %i letters\n", name, langeZeichne(name));

// frage

int end = 0;
char xx[0];

char imya[1];

do {
    fflush(stdin);
    printf("would you like to count a letter in %s (Y / N)?\n", name);
    scanf("%c", xx);

    switch (xx) {
        case "Y":
            printf("Please enter a letter\n");
            scanf("%s", imya);
            sucheZeichen(name, imya);
            break;
        case "N":
            printf("Have a nice Day!");
            end = 0;
            break;
        default:
            printf("Wrong input\n");
            break;

    }
}while (end==0);

}

首先,如果要将字母读入 xx,请不要使用数组,绝对 不是大小为 0 的数组。

其次,您的 switch 收到 char[] 而不是 char

接下来,在 case 中使用字符而不是字符串。

此外,根据问题中的信息,sucheZeichen 得到一个 char 作为第二个参数(或一个 int),所以与 xx 同样的问题作为数组也适用于 imya

此外,我在 scanf 中添加了 \n,因此它不会读取换行符。

您的代码应该像这样:

int main() {

    char name[200];

    printf("Please tell me your name:");
    fflush(stdin);
    scanf("%s", name);
    printf("%s has %i letters\n", name, langeZeichne(name));

    // frage

    int end = 0;
    char xx;

    char imya;

    do {
        fflush(stdin);
        printf("would you like to count a letter in %s (Y / N)?\n", name);
        scanf("%c\n", &xx);

        switch (xx) {
            case 'Y':
                printf("Please enter a letter\n");
                scanf("%c\n", &imya);
                sucheZeichen(name, imya);
                break;
            case 'N':
                printf("Have a nice Day!");
                end = 0;
                break;
            default:
                printf("Wrong input\n");
                break;

        }
    }while (end==0);

}