编辑了代码,现在我在读取文件时遇到了问题。我的结构没有得到值。
感觉就像我快要疯了,我正在努力寻找解决办法,大概需要8个小时...所以这是我的结构
typedef struct _megye
{
int megye;
int hektar1_min;
int hektar1_max;
int hektar1_tam;
int hektar2_min;
int hektar2_max;
int hektar2_tam;
int hektar3_min;
int hektar3_tam;
struct _megye *next;
}megye;
好吧,它正在尝试成为一个链表。这是我尝试从文件中读取数据并将其放入struct中的方法:
{
FILE *fb;
megye*p;
megye *mhead;
mhead=(megye*)malloc(sizeof(megye));
p=mhead;
fb=fopen("tamogatas.dat", "rb");
if (fread(p, 3, 7, fb) != 7)
{
printf("there was an error");
}
else
{
p=p->next;
p=(megye*)malloc(sizeof(megye));
p->next=NULL;
}
fclose(fb);
return 0;
}
顺便说一下,我的文件看起来像这样:
1 50 100 2 100 200 4 200 6
这种类型的7行。
因此,如果我运行此命令,则会收到错误“ Acces违规读取位置”。请帮我做什么,在课堂上我们还没有做过这样的事情,但他们仍然想要这样做。
这里似乎有几个问题。
一:
FILE *fb;
megye*p;
mhead=p=(megye*)malloc(sizeof(megye));
fb=fopen("tamogatas.dat", "rb");
if (fread(p, sizeof(megye), 7, fb) != 7)
我建议您避免使用a = b = c ...语法。它可能会导致细微的错误,并且在阅读时很容易遗漏。但是,真正的问题是您期望fread在这里做什么。您的数据文件是二进制文件吗?如果没有,您将无法获得期望。如果是,则期望它读取所有7个二进制结构值,并将它们存储在仅分配给一个这样的结构的内存位置中。几乎可以肯定这不是您想要做的。
{
printf("there was an error");
}
else
{
p=p->next=(megye*)malloc(sizeof(megye));
p->next=NULL;
}
fclose(fb);
return 0;
在您的else子句中,您将分配另一个结构位置,并将p和p-> next都设置为等于该位置。然后将p-> next设置为NULL。同样,这几乎肯定不是您想要执行的操作。
要形成一个链表,您需要一个指向NULL(空列表)或另一个节点的头。每个节点都有一个下一个字段,该字段指向NULL(列表结尾)或列表中的下一个节点。每个节点应单独分配,每次读取应仅读取该节点(格式正确)。我猜您的输入文件为文本,因此您需要将每个数字转换为二进制值。一种方法是使用标准的fscanf(...)函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句