【问题标题】:error : Expected expression before '{' toke while defining a 2 dimensional array in a switch statement in C错误:在 C 中的 switch 语句中定义二维数组时,“{”之前的预期表达式
【发布时间】:2020-03-23 16:40:27
【问题描述】:

为了向前迈进:我必须用 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]

【问题讨论】:

  • block[height][width] 的类型是什么?当你能回答这个问题时,你就知道出了什么问题
  • 你也忘了return block;create_block_sh函数的末尾,但那是另一回事
  • 相关错误是invalid type argument of unary '*' (have 'int')

标签: c arrays multidimensional-array switch-statement


【解决方案1】:

以下代码错误:

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

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

你能做的就是:

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
    }
}

【讨论】:

  • 好的,谢谢。在其他一些帮助下,我发现以下代码有效: block = (int *[]){(int []){0,1,1}, (int []){1,1,1}, ( int []){1,1,0}};
  • 我明白了。虽然这可能有效,但从语法上来说很难阅读。除非绝对必要,否则我会稍微重构您的代码并避免使用这种难以阅读的语法:)
猜你喜欢
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2014-02-22
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多