开头 我试图从文件中读取列表,然后将其写入另一个文件并在输出中显示它。问题是我认为阅读功能有效,但是当我尝试调用displayData函数时,我不断得到一个无限循环。我是本章的初学者,所以我无法弄清楚为什么会这种情况继续发生。这是我的两个功能:
void readData() {
FILE* f;
f=fopen("data.in","r");
first = last = NULL;
while (!feof(f)) {
p = (NodeT *)malloc(sizeof(NodeT));
fscanf(f,"%d",&p->key);
if (first == NULL) { /* empty list */
first = last = p;
p->next = p->prev = NULL;
}
else { /*nonempty list */
last->next = p;
p->prev = last;
last = p;
}
}
fclose(f);
}
void displayData() {
FILE* f;
f=fopen("data.out","w");
for (p = first; p!= NULL; p = p->next) {
printf("%d ",p->key);
fprintf(f,"%d ",p->key);
}
fclose(f);
}
另外,需要注意的是,我的数据是:1 2 3 4 5 6 7 8 9 10。 我的结构也是:
typedef struct node_type {
int key;
struct node_type *next, *prev;
}NodeT;
NodeT *p, *first, *last;
任何帮助将不胜感激。非常感谢!
答案 0 :(得分:0)
else { /*nonempty list */
last->next = p;
p->prev = last;
last = p;
}
您没有在非空列表情况下初始化p->next
。它应该是NULL,因为当你推到最后时没有下一个元素。
else { /*nonempty list */
last->next = p;
p->prev = last;
p->next = NULL;
last = p;
}