C 为每个命令实现一个没有条件的菜单式设备
假设我试图实现一个“菜单”,它要求用户输入一个命令,然后调用执行该命令的函数。我决定声明一个包含每个命令名的字符串数组,然后将用户的输入与该数组中的字符串进行比较,以了解下一步要做什么,而不是为每个命令指定一个条件块 比如:C 为每个命令实现一个没有条件的菜单式设备,c,C,假设我试图实现一个“菜单”,它要求用户输入一个命令,然后调用执行该命令的函数。我决定声明一个包含每个命令名的字符串数组,然后将用户的输入与该数组中的字符串进行比较,以了解下一步要做什么,而不是为每个命令指定一个条件块 比如: char* commands[] = {"cmd", "cmd1", "cmd2"}; 然后: while(strcmp(cmd,“end”)!=MATCH){ printf(“?:”); scanf(“%s”,cmd); 对于(i=0;i
char* commands[] = {"cmd", "cmd1", "cmd2"};
然后:
while(strcmp(cmd,“end”)!=MATCH){
printf(“?:”);
scanf(“%s”,cmd);
对于(i=0;i
有没有一种方法可以在没有任何条件或switch语句的情况下调用函数?我想实现一个函数指针的结构,每个命令都有一个成员,然后使用它,但我不确定如何实现,或者是否可能实现 创建一个包含命令和函数指针的结构:
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;
}
}
for(i=0;i
谢谢!我有点好奇函数的地址是如何分配的,更具体地说,我想我想知道链接器什么时候为函数分配内存地址,然后在这样的数组初始化中如何发挥作用?它就是这样。函数名在这方面没有什么特别之处。
for(i = 0; i < sizeof(commands)/sizeof(commands[0]); i++)
{
if(!strcmp(cmd, commands[i].cmd))
{
commands[i].func();
break;
}
}