在Switch语句中使用字母

时间:2019-12-04 15:51:57

标签: c compiler-errors char switch-statement warnings

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

我也收到了一个警告“警告:整数转换的不兼容指针,将'char [1]'传递给'char'类型的参数[-Wint-conversion]                                 sucheZeichen(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);

}

1 个答案:

答案 0 :(得分:0)

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

第二,您的switch收到的是char[]而不是char

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

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

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

您的代码应为:

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);

}