C 开关默认情况不触发

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

所以我想要的是,如果我输入的第一个字符与 ! 不同或? ,它应该只是说这是一个未知的 Action 。所以它适用于输入其他字符,但每次我输入空格/制表符/什么都没有时,它不会执行任何操作?

最佳答案

正如其他用户指出的: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;
        }
}

关于C 开关默认情况不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44901966/

相关文章:

c - 将指针数组传递给函数并计算大小

C 指向二维数组的指针

c - 我是否可以通过将变量设为静态来提高性能?

c++ - C++ 中的 while 循环中始终存在变量

c++ - 返回 char** 或传递 char* 数组

c - 为什么将一个变量设置为它自己的地址会在不同的程序运行时产生不同的结果?

c# - 编译器在打开枚举后提示未分配的变量

java - 如何避免循环切换反模式

Javascript Switch 未按预期工作

c - 复制文件中的单个字符