gpt4 book ai didi

c - 有没有办法在不退出 switch 语句的情况下通过 switch case 中途更改局部变量?

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:27 24 4
gpt4 key购买 nike

我正在处理一个相当大的枚举,它在概念上可以划分为代表四个不同的类别。目前,我在 switch case 语句中使用此枚举,以便将值映射到四个单独的数组(符合四个不同的类别)。

我很好奇的是,是否可以在 switch case 语句中的任意 case 之后更改本地定义的变量。这将允许将 switch 语句分成这四个不同的部分,并且为每种情况发生的值赋值——如果等同的话——可以发生在这些部分。

我想要的一个简化示例如下:

设置

enum incidental_indexes {
arr1_0, arr1_2, arr2_0, arr1_1, arr2_1
} indexes;

struct foobar{
int arr1[3];
int arr2[2];
}

enum indexes unknown_index = ???; // In my code there are two separate indexes being mapped
// from one another, so for the sake of example imagine that
// this index is unknown
enum indexes curr_index = arr1_1; //Value here does not matter
struct foobar my_struc;
int * curr_arr;
int mapped_index;

蛮力法

switch(unknown_index){
case(arr1_0):
curr_arr = my_struc.arr_1; //First category array
curr_index = arr1_0;
break;
case(arr1_1):
curr_arr = my_struc.arr_1; //First category array, again
curr_index = arr1_1;
break;
case(arr1_2):
curr_arr = my_struc.arr_1; //First category array, again, again
curr_index = arr1_2;
break;
case(arr2_0):
curr_index = arr2_0;
curr_arr = my_struc.arr_2; //Second category array
break;
case(arr2_1):
curr_index = arr2_1;
curr_arr = my_struc.arr_2; //....
break;
}

理想的方法

switch(unknown_index){
default: //Notice no break.
curr_arr = my_struc.arr_1; //First category array
case(arr1_0):
curr_index = arr1_0;
break;
case(arr1_1):
curr_index = arr1_1;
break;
case(arr1_2):
curr_index = arr1_2;
break;
default: //Something like a second default, however disallowed
curr_arr = my_struc.arr_2; //Second category array
case(arr2_0):
curr_index = arr2_0;
break;
case(arr2_1):
curr_index = arr2_1;
break;
}

功能上的好处显然是零,但是我很好奇这个功能是否存在于 C 中,或者是否有更好的方法来执行它。

谢谢!

最佳答案

Switch 语句只执行一个分支,所以你不能像那样在 switch 内部跳来跳去。然而,您可以做的是将某些情况组合在一起,中间没有 break:

switch(curr_index){
case arr1_0:
case arr1_1:
case arr1_2:
curr_arr = my_struc.arr_1;
break;
case arr2_0:
case arr2_1:
curr_arr = my_struc.arr_2;
break;
}

编辑:

对于索引分配部分,您可以像这样进行第二个切换:

switch(unknown_index){
case arr1_0:
curr_index = arr1_0;
break;
case arr1_1:
curr_index = arr1_1;
break;
case arr1_2:
curr_index = arr1_2;
break;
case arr2_0:
curr_index = arr2_0;
break;
case arr2_1:
curr_index = arr2_1;
break;
}

但是由于您总是分配 unknown_index 的值,所以上面的内容与此相同:

curr_index = unknown_index;

关于c - 有没有办法在不退出 switch 语句的情况下通过 switch case 中途更改局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33836681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com