2017-04-19 55 views
0

我試圖通過使用關鍵字而不是整數使用switch()語句。我把我的問題寫成了一個更簡單直接的例子,以更好地指出我的目標。我的相關代碼:使用字符串命令與switch()使用#define

#include <stdio.h> 
#include <stdlib.h> 

#define put 0 
#define get 1 
#define run 2 

int main() { 
    int ch; 

    printf("%s", "Please enter a command: "); 
    scanf("%d", ch); 

    switch (ch) { 
     case 0: 
      puts("You chose \"put\" as a command."); 
      break; 
     case 1: 
      puts("You chose \"get\" as a command."); 
      break; 
     case 2: 
      puts("You chose \"run\" as a command."); 
      break; 
    } 
} 

理想的情況下,當我掃描用戶輸入,我想用戶能夠利用上述#define報表提供的命令的。因此,提示用戶輸入值,輸入put,程序輸出case 0。這可能與switch()

+0

的預處理程序源代碼工作,而不是程序的輸入。 – aschepler

+0

任何編譯器警告或錯誤'int ch; ... scanf(「%d」,ch);'? – chux

回答

1

您需要將用戶輸入轉換爲命令的功能。 例如

int stringToCommand(char* cmd) 
{ 
    if (strcmp(cmd, "put") == 0) 
     return put; 
    ... 
} 

然後你就可以在交換機使用的#define

int cmd = stringToCommand(userInput); 
switch (cmd) { 
    case put: 
     puts("You chose \"put\" as a command."); 
     break; 
    ... 

通常這種類型的情況下我想看看枚舉,而不是依賴於#define語句。

0

下面顯示瞭如何實現switch語句。

#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
    const char * key_word[] = { "put", "get", "run" }; 
    const size_t N = sizeof(key_word)/sizeof(*key_word); 

    enum { PUT, GET, RUN }; 

    char command[5]; 

    printf("Please enter a command: "); 
    fgets(command, sizeof(command), stdin); 

    command[ strcspn(command, "\n") ] = '\0'; 

    size_t i = 0; 

    while (i < N && strcmp(command, key_word[i]) != 0) i++; 

/* 
    if (i != N) 
    { 
     printf("You chose \"%s\" as a command.\n", key_word[i]); 
    } 
    else 
    { 
     puts("Invalid input."); 
    } 
*/ 

    switch (i) 
    { 
    case PUT: 
     printf("You chose \"%s\" as a command.\n", key_word[i]); 
     break; 
    case GET: 
     printf("You chose \"%s\" as a command.\n", key_word[i]); 
     break; 
    case RUN: 
     printf("You chose \"%s\" as a command.\n", key_word[i]); 
     break; 
    default: 
     puts("Invalid input."); 
     break; 
    } 

    return 0; 
} 

程序輸出可能看起來像

Please enter a command: get 
You chose "get" as a command.