C Switch默认情况下不触发

时间:2017-07-04 09:21:26

标签: 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 '?': 
        printf("Question");
        break;
    default: 
        printf("Unknown Action");
        break;
    }
}

所以我想要的是,如果我输入的第一个字符不同于!?,那么它应该说它是一个未知的动作。所以它适用于键入其他字符,但每次我键入一个空格/制表符/什么都没有,它什么都不做?

1 个答案:

答案 0 :(得分:1)

正如其他用户指出:scanf ignores whitespaces, fgets doesn't.

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