2017-07-04 48 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

你的意思是輸入一些空格,然後按回車?那麼,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 - 問題處理 – 7hibault