使用struct和scanf的C程序生成错误:在‘;之前应为表达式;机器人&x2019;
我有一个C程序,试图用scanf设置使用struct和scanf的C程序生成错误:在‘;之前应为表达式;机器人&x2019;,c,struct,scanf,C,Struct,Scanf,我有一个C程序,试图用scanf设置struct值。我得到一个错误: s.c: In function ‘main’: s.c:15:17: error: expected expression before ‘ROBOT’ 根据该代码: enum DIRECTION {N,E,S,W}; typedef struct { int xpos; int ypos; enum DIRECTION dir; } ROBOT; int main() { int x
struct
值。我得到一个错误:
s.c: In function ‘main’:
s.c:15:17: error: expected expression before ‘ROBOT’
根据该代码:
enum DIRECTION {N,E,S,W};
typedef struct {
int xpos;
int ypos;
enum DIRECTION dir;
} ROBOT;
int main() {
int x, y, i;
char string[20];
printf("Enter x coordinate: \n");
scanf("%i", &ROBOT.xpos);
}
这个错误是什么意思?我做错了什么?在您对
机器人的定义中类型定义表示机器人本身是结构类型,而不是机器人。在main()
函数中声明一个ROBOT myRobot
,并将其传入。在ROBOT
定义中的typedef
表示ROBOT
是结构类型本身,而不是ROBOT。在main()
函数中声明一个ROBOT myRobot
,并将其传入。您需要一个实际的struct(ROBOT
)对象
您需要一个实际的struct(ROBOT
)对象
ROBOT
是类型的名称,如int
,您需要声明此类型的变量
ROBOT r;
printf("Enter x coordinate: \n");
scanf("%i", &r.xpos);
printf("Enter y coordinate: \n");
scanf("%i", &r.ypos);
ROBOT
是类型的名称,如int
,您需要声明此类型的变量
ROBOT r;
printf("Enter x coordinate: \n");
scanf("%i", &r.xpos);
printf("Enter y coordinate: \n");
scanf("%i", &r.ypos);
当您执行以下操作时
typedef struct {
int xpos;
int ypos;
enum DIRECTION dir;
} ROBOT;
首先定义一个匿名struct
类型,然后使用typedef
关键字为该类型指定一个名称ROBOT
<代码>类型定义定义类型的新名称。所以这里的ROBOT
是一个类型名,就像int
,float
等,而不是一个变量。声明这种类型的变量就像声明任何类型的变量一样,即,typename var\u name代码>
ROBOT bot; // bot is a variable of type ROBOT
// do stuff with bot
printf("Enter x coordinate: \n");
scanf("%i", &ROBOT.xpos);
printf("Enter y coordinate: \n");
scanf("%i", &ROBOT.ypos);
还请注意,转换说明符%i
如果以0x或0x开头,则读取以16为基数的整数;如果以0开头,则读取以8为基数的整数;否则读取以10为基数的整数。%d
说明符总是以10为基数读取,即十进制整数。除非您确实需要%i
,否则请始终使用%d
当您执行以下操作时
typedef struct {
int xpos;
int ypos;
enum DIRECTION dir;
} ROBOT;
首先定义一个匿名struct
类型,然后使用typedef
关键字为该类型指定一个名称ROBOT
<代码>类型定义定义类型的新名称。所以这里的ROBOT
是一个类型名,就像int
,float
等,而不是一个变量。声明这种类型的变量就像声明任何类型的变量一样,即,typename var\u name代码>
ROBOT bot; // bot is a variable of type ROBOT
// do stuff with bot
printf("Enter x coordinate: \n");
scanf("%i", &ROBOT.xpos);
printf("Enter y coordinate: \n");
scanf("%i", &ROBOT.ypos);
还请注意,转换说明符%i
如果以0x或0x开头,则读取以16为基数的整数;如果以0开头,则读取以8为基数的整数;否则读取以10为基数的整数。%d
说明符总是以10为基数读取,即十进制整数。除非您确实需要%i
,否则请始终使用%d
&ROBOT.xpos
,什么是ROBOT
?你需要有机器人代码>那里的某个地方。下次请发布错误,以便用户能够轻松识别问题。编写scanf(“%i”,&ROBOT.xpos)
类似于编写scanf(“%i”、&int)
&ROBOT.xpos
,什么是ROBOT
?你需要有机器人代码>那里的某个地方。下次请发布错误,以便用户能够轻松识别问题。编写scanf(“%i”,&ROBOT.xpos)
类似于编写scanf(“%i”、&int)代码>