假设我正在尝试实现各种“菜单”,要求用户输入命令,然后调用执行该命令的函数。我没有为每个命令设置一个条件块,而是决定声明一个包含每个命令名的字符串数组,然后将用户的输入与该数组中的字符串进行比较,看看下一步该做什么。
类似的东西:
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语句的情况下调用函数?我正在考虑实现一个函数指针结构,每个命令都有一个成员,然后使用它,但我不确定如何甚至可能。
答案 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;
}
}