2017-04-19 8 views
0

整数の代わりにキーワードを使用してswitch()ステートメントを使用しようとしています。私はここで私の目標をよりよく指摘するために、より単純で直接的な例に自分の問題を書いた。私の関連するコード:#defineを使用してswitch()で文字列コマンドを使用する

#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. 
関連する問題