0

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

就像是:

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 语句的情况下调用函数?我正在考虑实现一个函数指针结构,每个命令都有一个成员,然后使用它,但我不确定如何或是否可能。

4

1 回答 1

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;
    }
}
于 2013-10-19T22:48:07.907 回答