【发布时间】:2016-05-19 04:54:54
【问题描述】:
我正在研究两个函数。第一个将文件中的列表加载到程序中(在开始时),第二个将列表的数据保存到文件中。我试图编写这两个函数,但我很难(我不太擅长编程)。这是我正在使用的结构,我还添加了索引的定义和列表的创建:
#define index 30
typedef struct dataR* data;
struct dataR{
int age;
char name[index];
};
typedef struct nodeR* node;
struct nodeR{
data a;
node next;
};
typedef struct listR* list;
struct listR{
node head, tail, curr;
int size;
};
list list_create(){
list List=malloc(sizeof(struct listR));
assert(List);
List->head=NULL;
List->tail=NULL;
List->curr=NULL;
List->size=0;
return List;
}
这是将文件数据加载到列表中的函数(在程序开始时)。显然这是错误的,但由于列表为空,我不知道如何将数据加载到每个节点:
list load(char *filename, list List)
{
FILE *fd=fopen("filename","r");
fscanf(fd, "%d",&(List->head->a->age));
fscanf(fd, "%s",&(List->head->a->name[index-1]));
fclose(fd);
fd=NULL;
}
这是在程序末尾保存所有列表数据的函数:
void save(char *filename, list List)
{
FILE *fd=fopen("filename.dat","w");
if (fd==NULL)
{
printf("File does not exist");
return;
}
fwrite(List->head->a, sizeof(struct dataR),1,fd);
node tmp=List->head->next;
while(tmp->next!=NULL)
{
fwrite(tmp->next->a, sizeof(struct dataR),1,fd);
tmp=tmp->next;
}
fclose(fd);
fd=NULL;
}
文件中的数据应该是这样的:
35 Nick
29 Jim
19 Helen
嗯,当然,函数不会按原样那样做。所以我需要一些帮助来改进它们。非常感谢任何提示(关于文件)和帮助。我很抱歉发了这么长的帖子。感谢您的时间。
【问题讨论】:
-
您需要提出一个具体的问题(“我需要帮助”并不具体)。看来您的加载和保存都是错误的。因此,一次只关注其中一个,并提出一个具体的问题。
-
您永远不会为您的列表或其元素分配任何内存。
-
@kaylum 我应该改变什么?那是我的问题。我认为主题很具体。
-
这个问题来自this one 发布你的代码的相关部分,或者如果它不是太长,则发布整个代码,并声明你的代码使用的所有变量。附注:关闭上一个问题,选择一个答案...
-
你的加载函数使用
fscanf,所以你的保存函数应该使用fprintf