【问题标题】:C Switch default case not triggering [duplicate]C切换默认情况不触发[重复]
【发布时间】:2017-07-04 09:21:25
【问题描述】:

我陷入了一件非常尴尬的事情。代码如下:

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

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

【问题讨论】:

  • 你在抱怨潮红吗?
  • 你的意思是输入一些空格,然后按回车?好吧,scanf 会跳过空格,所以你什么都不读,一直在 scanf 中,直到你输入一些非空格......
  • 在 Linux 平台的 GCC 编译器中运行良好。
  • 附注:这里不需要malloc,您可以简单地使用:char c[128];...

标签: c pointers switch-statement


【解决方案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;
        }
}

【讨论】:

  • 不要回答重复的问题
  • @VishwajeetVishu 你可能是对的 :)
  • @VishwajeetVishu 你说得对,我不应该回答,下次我会更加谨慎,坚持旗帜/cmets meta.stackexchange.com/questions/10841/…
  • @underscore_d see easy 25 声望:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 2018-06-04
  • 2015-03-26
  • 1970-01-01
相关资源
最近更新 更多