即使开关语法不接受大小写标签的变量,是否有任何解决方法来执行类似的操作,而不是简单的旧if-else比较?
最佳答案
通常为了解决这个问题,我使用一个结构和函数指针,只有一个if。
未经测试的例子,只是想知道我在说什么:
#include "cases_functions.h"
typedef struct s_switch
{
char* value;
void (*do)(void);
} t_switch;
t_switch cases[] =
{
{"add", add},
{"sub", sub},
{"divide", div},
{0, 0}
};
void personal_switch(char *what)
{
int i = 0;
while (cases[i].value)
{
if (strcmp(cases[i].value, what) == 0)
cases[i].do();
i++;
}
}
有了它,您可以在运行时更改不同的案例,添加新的案例等等。。。
当然,选择方法是免费的,例如,您可以只使用
int
并使用==
或更复杂的东西进行测试。关于c - 如何在switch语句的case字段中使用变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13232417/