gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:30:20 24 4
gpt4 key购买 nike

我正在将以前的面向对象程序创建到同一个程序中,但用 C 编写,我没有经验,但正在慢慢学习。我的问题围绕着我的第一步,即拥有一个我称之为堆上的房间的结构数组。以及用从一个房间移动到另一个房间的生物填充结构内的数组。到目前为止,我的问题是尝试用从标准输入读取的信息填充房间变量。首先是房间的数量(我的数组的大小),然后是状态(干净或肮脏)以及房间是否有邻居(一旦我可以先填充数组,有邻居的房间将在条件语句中连接) ,但是这些都是整数。之前有人建议我有一个指向数组的全局指针,并在扫描时以这种方式添加信息。我相信我可能会接近吗?但无论我尝试什么,在扫描 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);

还可以在启用警告的情况下构建代码!这会捕获一些类似的令人讨厌的错误。

关于c - 填充结构数组并在堆上分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25687166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com