填充结构数组并在堆上分配内存

时间:2014-09-05 13:35:02

标签: c arrays struct malloc

我正在将以前面向对象的程序创建到同一个程序中,但是用C语言编写,我没有经验但是学习很慢。我的问题围绕着我的第一步,就是有一个结构数组,我称之为堆上的房间。同样也可以使用从一个房间移动到另一个房间的生物来填充结构内的数组。到目前为止,我的问题是尝试用从stdin读入的信息填充房间变量。首先是房间的数量(我的数组的大小),然后是状态(干净或脏)以及房间是否有邻居(一旦我可以先填充数组,有条件语句的房间将被连接起来) ,但这些都是整数。我之前得到的建议是有一个指向数组的全局指针,并在扫描时添加信息。我相信我可能会接近?但无论我正在尝试什么,我都会在扫描5个整数后立即出现分段错误。我对此非常陌生并尽快学习我在C项目即将到期的日期。任何建议或帮助所有人都将不胜感激。我的代码在

之下
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int type;
int room_number;
int creat_number;
} creature;

struct room;

typedef struct {
struct room *north; //refernce to neighbor
struct room *south;
struct room *east;
struct room *west;
int room_name, state;
creature creature_array[100];
} room;
room *ptr;
int respect = 40;

int main(void) {
int room_name, state, north, south, east, west;
printf("Welcome!\n");
printf("How many rooms?\n");
int num_r;
scanf("%d", &num_r);
ptr = malloc(num_r * sizeof (room));
int i = 0;
for (; i < num_r; i++) {
    scanf("%d", "%d", "%d", "%d", "%d", &state, &north, &south, &east, &west);
    (ptr + i)->room_name = i;
    (ptr + i)->state = state;
     (ptr+i)->north=north;
     (ptr+i)->south=south;
     (ptr+i)->east=east;
     (ptr+i)->west=west;
    if (north != -1) {

    }
    if (south != -1) {

    }
    if (east != -1) {

    }
    if (west != -1) {

    }

}

1 个答案:

答案 0 :(得分:1)

只有scanf的第一个参数用作“格式”,这意味着你的

scanf("%d", "%d", "%d", "%d", "%d", &state, &north, &south, &east, &west);

被解释为“for formatter "%d"获取第一个参数,而解释为int”。所以你的第二个"%d"被解释为int(因为它作为指向它编译的字符串数组的指针传递),其他参数是被忽略

使用:

scanf("%d %d %d %d %d", &state, &north, &south, &east, &west);

同时在启用警告的情况下构建代码!这会抓住一些令人讨厌的错误。