2017-07-04 9 views
0

私はかなり厄介なことに悩まされています。ここでは、コードです:Cデフォルトのケースをトリガーしないでください

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

は、だから私は私の入力の最初の文字が!または?とは異なる何かがあれば、ある何をしたい、それだけで、それは未知の行動だと言う必要があります。だからそれは他の文字を入力するために動作しますが、空白/タブ/何も入力しないときは何もしません。

+2

あなたは、フラッシング不満ていますか? –

+2

空白を入力してEnterキーを押すことを意味しますか?さて、scanfは空白をスキップするので、何も読み込まずに、scanf内で空白以外の部分を入力するまでは... – Aconcagua

+0

Linuxプラットフォーム上のGCCコンパイラでうまくいきます。 – rsp

答えて

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

二重の質問に答えません –

+0

@VishwajeetVishuあなたは正しいかもしれません。 –

+2

@VishwajeetVishuあなたは正しいですが、私はそれに答えてはならないはずです、次回より慎重になり、フラグ/コメントに固執します。https://meta.stackexchange.com/questions/10841/how-should-duplicate -questions-be-treated – 7hibault

関連する問題