簡體   English   中英

填充結構數組並在堆上分配內存

[英]Filling an array of structs and allocating memory on the heap

我正在將以前是面向對象的程序創建到同一程序中,但是用C編寫,我沒有經驗,但是學習緩慢。 我的問題圍繞我的第一步展開,第一步是在堆上建立一個稱為房間的結構數組。 以及用從一個房間移到另一個房間的生物填充結構內部的數組。 到目前為止,我的問題是嘗試用從stdin讀取的信息填充room變​​量。 首先是房間的數量(我的數組的大小),然后是狀態(干凈或骯臟),以及房間是否有鄰居(一旦我可以先填充數組,有鄰居的房間將在條件語句中連接) ,但是它們都是整數。 以前曾建議過我要有一個指向數組的全局指針,並在掃描時以這種方式添加信息。我相信可能會很近嗎? 但是,無論我嘗試什么,在掃描完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) {

    }

}

僅scanf的第一個參數用作“格式”,這意味着您

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

被解釋為“對於格式化程序, "%d"獲得第一個參數,而解釋為int“。 因此,您的第二個"%d"被解釋為int(因為它作為指向要編譯的字符串數組的指針傳遞),其他參數將被忽略

采用 :

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

還要在啟用警告的情況下構建代碼! 這樣會捕獲一些討厭的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM