用C++写一段去除多余的Switch case的代码
时间: 2023-09-15 17:06:03 浏览: 96
### 回答1:
switch (num)
{
case 1:
// code block
break;
case 2:
// code block
break;
default:
// code block
}switch (num) {
case 1:
// code block
break;
case 2:
// code block
break;
}
### 回答2:
在C语言中,可以使用数组和函数指针的方式来替代多余的switch case代码,实现代码的简化和优化。具体步骤如下:
1. 首先,我们需要定义一个结构体数组,用于存储每个case的条件和对应的处理函数指针。
```c
typedef struct {
int condition;
void (*function)();
} Case;
```
2. 然后,我们可以定义多个处理具体情况的函数,这些函数的参数和返回值根据实际需求而定。
```c
void case1() {
// 处理case 1的逻辑
}
void case2() {
// 处理case 2的逻辑
}
void case3() {
// 处理case 3的逻辑
}
```
3. 接下来,我们需要初始化结构体数组,并将每个case的条件与对应的处理函数指针进行绑定。
```c
Case cases[] = {
{1, case1},
{2, case2},
{3, case3}
};
```
4. 最后,我们可以根据输入的条件,在结构体数组中查找对应的处理函数,并进行调用。
```c
void executeCase(int condition) {
for (int i = 0; i < sizeof(cases) / sizeof(Case); i++) {
if (cases[i].condition == condition) {
cases[i].function();
return;
}
}
// 如果没有找到对应条件的处理函数,可以根据实际需求进行处理
printf("No matching case found.\n");
}
```
使用以上方法,即可实现去除多余的switch case的代码,使得代码更简洁、易读和易维护。
### 回答3:
为了去除多余的Switch case,可以使用其他方式重构代码,例如使用函数指针数组和结构体来模拟Switch case的功能。
首先,我们可以定义一个包含不同case的函数指针数组,每个case对应一个函数。例如:
```c
typedef void (*CaseFunc)(); // 定义函数指针类型
void case1() {
printf("This is case 1\n");
}
void case2() {
printf("This is case 2\n");
}
void case3() {
printf("This is case 3\n");
}
// 声明函数指针数组,并初始化
CaseFunc cases[] = {case1, case2, case3};
```
接下来,我们可以定义一个结构体来表示不同case的信息,结构体包含一个id表示case的索引,以及一个指向对应case函数的函数指针。例如:
```c
typedef struct {
int id;
CaseFunc func;
} CaseInfo;
// 初始化各个case的信息
CaseInfo caseInfos[] = {
{1, case1},
{2, case2},
{3, case3}
};
```
然后,我们可以定义一个根据id查找对应case函数指针的函数。例如:
```c
CaseFunc getCaseFunc(int id) {
int i;
int numCases = sizeof(caseInfos) / sizeof(caseInfos[0]);
for (i = 0; i < numCases; i++) {
if (caseInfos[i].id == id) {
return caseInfos[i].func;
}
}
// 若没有找到对应id的case函数,则返回一个默认函数指针
return NULL;
}
```
最后,我们可以使用上述函数指针数组和结构体,重构原本的Switch case代码。例如:
```c
int caseId = 2; // 待选择的case id
CaseFunc func = getCaseFunc(caseId);
if (func != NULL) { // 检查是否找到对应case函数
// 调用对应case函数
func();
} else {
printf("Invalid case id\n");
}
```
通过上述方式,我们使用函数指针数组和结构体模拟Switch case的功能,可以更加灵活地添加、删除和修改case,避免了代码中多余的Switch case语句。此外,使用函数指针数组和结构体还能使代码结构更为清晰和可读。
阅读全文