为每个命令实现没有条件的设备之类的菜单

时间:2013-10-19 22:38:50

标签: c

假设我正在尝试实现各种“菜单”,要求用户输入命令,然后调用执行该命令的函数。我没有为每个命令设置一个条件块,而是决定声明一个包含每个命令名的字符串数组,然后将用户的输入与该数组中的字符串进行比较,看看下一步该做什么。

类似的东西:

char* commands[] = {"cmd", "cmd1", "cmd2"};

然后:

while(strcmp(cmd, "end") != MATCH) {

    printf("?:");
    scanf("%s", cmd);

    for(i = 0; i < CMD_NUMBER; i++) {
        if(strcmp(cmd, commands[i]) == MATCH) {
            /*do something */

        }   
    }
}

有没有办法在没有任何条件或switch语句的情况下调用函数?我正在考虑实现一个函数指针结构,每个命令都有一个成员,然后使用它,但我不确定如何甚至可能。

1 个答案:

答案 0 :(得分:2)

创建一个包含命令和指向函数的指针的结构:

typedef struct {
    char * cmd;
    void (* func)();
} Command_t;

Command_t commands[] = {
    "cmd", func_cmd,
    "cmd2", func_cmd2
};

注意:你需要声明这个结构上面的函数,否则你的编译器会对它们不屑一顾。

(编辑)为了完整起见,你将这个结构用作

for(i = 0; i < sizeof(commands)/sizeof(commands[0]); i++)
{
    if(!strcmp(cmd, commands[i].cmd))
    {
        commands[i].func();
        break;
    }
}