0

这是我使用的头文件:

 typedef struct room room;
 struct room {
 char name[21];      
 int num_doughnuts;  
 int num_milkshakes;
 room* portal[4]; 
 };

和我的代码:

struct room* create_room()
{ 
  for(i = 0; i < num_room; i++) 
  {
      room[i] = (struct room*)malloc(sizeof(room));
      printf("input room details\n");
      fgets(input, max_length, stdin);
      sscanf(input, "%s %i %i", room_name, &dnuts, &mshakes);

      strcpy(room[i].name, room_name);  //assign name
      room[i].num_doughnuts = dnuts;  //assign doughnuts
      room[i].num_milkshakes = mshakes;   //assign milkshakes


  }
  return 0;

}

我在调用 create_room() 之前在主函数中声明了房间结构

    struct room room[num_room];

我应该让用户输入为用户定义的房间数量存储一个字符串和两个整数。

expected identifier or '('对于这些行,我不断收到错误消息:

      room[i] = (struct room*)malloc(sizeof(room));
      room[i].num_doughnuts = dnuts;  //assign doughnuts
      room[i].num_milkshakes = mshakes;   //assign milkshakes

我还得到:意外类型“房间”:尝试分配名称时的预期表达式:

      strcpy(room[i].name, room_name);  //assign name

我宣布它的方式有问题,但我不知道是什么。我已经看到了其中一些问题并尝试了几种不同类型的解决方案,但我不断收到类似的错误。

任何人都可以对此有所了解吗?我真的被困住了!非常感激!

PS如果有帮助,所有这些房间必须在创建后存储在双向链表中,门户[4]存储指向其他房间的指针。我不知道这是否对我的问题有任何影响,但额外的信息永远不会伤害任何人!

4

3 回答 3

1

你写的数组room是在主函数中声明的。然后它在 中是不可见的create_rooms。这意味着唯一room可见的是由声明的类型typedef,这就是编译器抱怨的原因。

请注意,您不能在 mainroom 之外声明数组,因为您已经使用了由 .room声明的类型的全局标识符typedef。(为什么里面的声明main不会产生编译错误?如果在 main 内完成,本地声明会隐藏全局声明,即类型room在 内不可见main。)

解决方法:在外面声明这个数组main,另外命名。

于 2013-05-20T17:48:33.597 回答
0

我怀疑问题出在这一行:

typedef struct room room;

每次您尝试引用您的结构时,它都会做一些有趣的事情。尝试删除它,因为无论如何您都没有使用它。

于 2013-05-10T00:56:52.240 回答
0

You are reusing the name "room" in confusing ways

struct room room[num_room]; /* room & room again? */

am surprised it is even compiling, please use different variable names

Also, is num_room a const or #define ? You are defining an array of rooms and also doing malloc per room in create_room. Please check that too

In a Quick and dirty way, I made it work, feel free to take hints and ask me if you have specific questions (in comments):

#include <stdio.h>


typedef struct room room;
 struct room {
 char name[21];
 int num_doughnuts;
 int num_milkshakes;
 room* portal[4];
 };

int num_room = 2;

struct room* create_rooms()
{

        int i;

   /* Create a pointer to rooms */
   struct room *rooms;
   char input[256], room_name[256];
   int dnuts, mshakes;
   int max_length = 256;


   /* Allocate memory for all rooms */
   rooms = malloc( num_room * sizeof(room) );


  for(i = 0; i < num_room; i++)
  {
      printf("input room details\n");
      fgets(input, max_length, stdin);
      sscanf(input, "%s %i %i", room_name, &dnuts, &mshakes);

      strcpy(rooms[i].name, room_name);  //assign name
      rooms[i].num_doughnuts = dnuts;  //assign doughnuts
      rooms[i].num_milkshakes = mshakes;   //assign milkshakes


  }
  return rooms;

}

main()
{
        struct room *rooms;
        int j;

        rooms = create_rooms();

        for ( j=0; j < num_room; j++ )
        {
                printf( "%s, %d %d\n", rooms[j].name, rooms[j].num_doughnuts, rooms[j].num_milkshakes );
        }

        /* free */
        free (rooms );
}
于 2013-05-10T01:02:04.067 回答