Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用struct和scanf的C程序生成错误:在‘;之前应为表达式;机器人&x2019;_C_Struct_Scanf - Fatal编程技术网

使用struct和scanf的C程序生成错误:在‘;之前应为表达式;机器人&x2019;

使用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

我有一个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, 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)