C 在交换机中分配结构不工作

C 在交换机中分配结构不工作,c,C,在我的程序中,我试图创建一个新的基于结构的od switch语句,但当我这样做时,编译器返回一个错误: 位置分配行上“{”标记前面的语法错误 我正在使用dev-c++4.9.9.2作为IDE(我想它使用MinGW作为编译器)。我正在帮助我哥哥完成编程任务,我已经好几年没见过c了,所以我很生疏(我以前也不是冠军) 以下是简化的代码: typedef enum{TOP_RIGHT = 0,TOP_LEFT,BOTTOM_RIGHT,BOTTOM_LEFT} diagonal_t; typedef s

在我的程序中,我试图创建一个新的基于结构的od switch语句,但当我这样做时,编译器返回一个错误:

位置分配行上“{”标记前面的语法错误

我正在使用dev-c++4.9.9.2作为IDE(我想它使用MinGW作为编译器)。我正在帮助我哥哥完成编程任务,我已经好几年没见过c了,所以我很生疏(我以前也不是冠军)

以下是简化的代码:

typedef enum{TOP_RIGHT = 0,TOP_LEFT,BOTTOM_RIGHT,BOTTOM_LEFT} diagonal_t;
typedef struct
{
   int row;
   int column;
} position_t;
...
void checkDiagonal(diagonal_t diagonal_to_check)
{
    ...
    position_t position;
    switch(diagonal_to_check)
    {
        case TOP_RIGHT:
             position = {0,0}; //here's the error, but I don't know how to repair it.
                               //how to create a new struct here without disrupting the
                               //switch?
             break;
        case TOP_LEFT:
             position = {0,0};
             break;
        ....
    }
}

_type_struct={init_value}语法的
var_仅在定义中起作用;在赋值中不起作用

处理is的三种常见方法是

  • 定义初始化结构的函数
  • 定义一个函数,该函数将字段设置为传递的参数,以及
  • 分配
    结构的各个字段
  • 方法1:

    void init_pos(position_t *p) {
        p->row = 0;
        p->column = 0;
    }
    ...
    case TOP_LEFT:
        init_pos(&position);
        break;
    
    方法2:

    void set_pos(position_t *p, int r, int c) {
        p->row = r;
        p->column = c;
    }
    ...
    case TOP_LEFT:
        set_pos(&position, 0, 0);
        break;
    
    方法3:

    case TOP_LEFT:
        position.row = 0;
        position.column = 0;
        break;
    

    您不能这样做:赋值和初始化不是一回事。您正在尝试在赋值中使用初始值设定项语法。您必须手动设置这两个字段:

    case TOP_RIGHT:
             position.row = 0;
             position.column = 0;
    /* ... */
    

    您需要强制转换为结构类型,如下所示:

    position = (position_t){0, 0};
    

    @哈珀:是的,你说得对!谢谢你的更正。
    position=(position_t){0,0};
    在C99中