C 在交换机中分配结构不工作
在我的程序中,我试图创建一个新的基于结构的od switch语句,但当我这样做时,编译器返回一个错误: 位置分配行上“{”标记前面的语法错误 我正在使用dev-c++4.9.9.2作为IDE(我想它使用MinGW作为编译器)。我正在帮助我哥哥完成编程任务,我已经好几年没见过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
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中