C开关默认情况下不触发

C开关默认情况下不触发,c,pointers,switch-statement,C,Pointers,Switch Statement,我被一件很尴尬的事情缠住了。代码如下: #include <stdio.h> #include <stdlib.h> void processCommand(){ char *c = malloc(sizeof(char) * 128); scanf("%s", c); switch(*c){ case '!': printf("Action"); break; case '?':

我被一件很尴尬的事情缠住了。代码如下:

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

void processCommand(){
    char *c = malloc(sizeof(char) * 128);

    scanf("%s", c);

    switch(*c){
    case '!': 
        printf("Action");
        break;
    case '?': 
        printf("Question");
        break;
    default: 
        printf("Unknown Action");
        break;
    }
}
#包括
#包括
void processCommand(){
char*c=malloc(sizeof(char)*128);
scanf(“%s”,c);
开关(*c){
案例“!”:
printf(“行动”);
打破
案例“?”:
printf(“问题”);
打破
违约:
printf(“未知行动”);
打破
}
}

所以我想要的是,如果我输入的第一个字符与
不同
,它应该说这是一个未知的操作。因此,它可以用于键入其他字符,但每次我键入空白/制表符/什么都不做,它什么也不做?

正如其他用户所指出的:


你在抱怨刷新吗?你是说输入一些空格,然后按enter键?好吧,scanf将跳过空白,所以您在scanf中不读取任何内容,直到您输入一些非空白…它在Linux平台上的GCC编译器中工作正常。只需附带说明:您实际上不需要
malloc
,您只需要:
char c[128]相反…不要回答重复的问题question@VishwajeetVishu你可能是对的:)@VishwajeetVishu虽然你是对的,但我不应该回答这个问题,下次我会更加谨慎,坚持旗帜/评论@underline\u d see easy 25声誉:/
void processCommand(){
    char *c = malloc(sizeof(char) * 128);
    fgets (c, sizeof(char) * 128, stdin);

    switch(*c){
        case '!': 
            printf("Action");
            break;
        case '?': 
            printf("Question");
            break;
        default: 
            printf("Unknown Action");
            break;
        }
}