【问题标题】:C program using struct and scanf produces error: expected expression before ‘ROBOT’使用 struct 和 scanf 的 C 程序产生错误:“ROBOT”之前的预期表达式
【发布时间】:2014-02-20 11:50:02
【问题描述】:

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

这个错误是什么意思,我做错了什么?

【问题讨论】:

  • &ROBOT.xposROBOT 是什么?你需要在某个地方有ROBOT robot;
  • 下次请发布错误,以便用户轻松识别问题。
  • scanf("%i", &ROBOT.xpos);就像写scanf("%i", &int);

标签: c struct scanf


【解决方案1】:

ROBOT是类型名称,如int,需要声明一个该类型的变量。

ROBOT r;
printf("Enter x coordinate: \n");
scanf("%i", &r.xpos);
printf("Enter y coordinate: \n");
scanf("%i", &r.ypos);

【讨论】:

    【解决方案2】:

    您需要一个实际的结构 (ROBOT) 对象。

    ROBOT r;
    scanf("%i", &r.xpos);
    

    【讨论】:

      【解决方案3】:

      当您执行以下操作时

      typedef struct {
         int xpos;
         int ypos;
         enum DIRECTION dir;
      } ROBOT;
      

      首先定义一个匿名的struct 类型,然后使用typedef 关键字为该类型命名ROBOTtypedef 为类型定义了一个新名称。所以这里的ROBOT 是一个类型名称,就像intfloat 等,而不是一个变量。声明这种类型的变量就像声明任何类型的变量一样,即typename var_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

      【讨论】:

        【解决方案4】:

        ROBOT 定义中的typedef 意味着ROBOT 是结构类型本身,而不是a 机器人。在您的 main() 函数中声明 ROBOT myRobot,然后将其传入。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-19
          • 2023-03-07
          • 2014-02-22
          • 1970-01-01
          • 2016-01-17
          • 1970-01-01
          • 1970-01-01
          • 2014-04-20
          相关资源
          最近更新 更多