错误:在C中的switch语句中定义二维数组时,在'{'标记之前的期望表达式

问题描述 投票:0回答:1

要向前走:我必须用C做一个项目,但是我和我的搭档遇到了错误,我们无法弄清楚如何解决它。它告诉我们,当我们定义1和0时,在switch_statement的每种情况下,“ {”之前的预期表达式都有错误。有人有主意吗?

int **create_block_sh(int height, int width, int desired_shape)
{
   int **block = create_2D_dyn(height, width);
   switch (desired_shape)
   {
    case 1 :
        block[height][width] = {{1,0,0},
                                {1,1,0},
                                {1,1,1}};
        break;
    case 2:
        block[height][width] = {{1,0,0},
                                {1,0,0},
                                {1,1,1}};
        break;
    case 3:
        block[height][width] = {{1,0,0},
                                {1,0,0},
                                {1,0,0}};
        break;

    default:
        printf("error !!");
        break;
    }

}

这里是屏幕截图:Screenshot of CodeBlock

[谢谢大家,但在进一步的帮助下,我找到了一个替代方法,它是:block =(int * []){(int []){0,1,1},(int []){1,1, 1},(int []){1,1,0}};这是屏幕截图:[http://prntscr.com/rlco7f]

c arrays multidimensional-array switch-statement
1个回答
2
投票

以下代码错误:

block[height][width] = {{1,0,0},
                        {1,1,0},
                        {1,1,1}};

block是2D整数数组,每个元素只是一个整数。所以这样分配是错误的。

您所能做的就是:

block[height][width] = 1;

此外,这样做是错误的: 区块[高度] = {1,2,3}

您只能在声明数组时做您想做的事,例如:

int arr[3][3] = {{1,0,0},
                 {1,1,0},
                 {1,1,1}};

此外,请将每个case语句的表达式放在大括号内,例如:

switch(...){
    case 1:
    {
      // code
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.