提问人:Mohammad Harouak 提问时间:11/30/2021 最后编辑:JabberwockyMohammad Harouak 更新时间:11/30/2021 访问量:39
在 C 语言中使用链表的队列仅将最后一个节点作为整个无限队列
Queues Using Linked List in C only take last node as a whole infinite queue
问:
我正在做一个数据结构项目。我被要求从一个名为“ToServe.txt”的文件中获取信息。文件中的数据采用以下形式:
TicketNumberSpaceStudentIDSpaceStudentName
TicketNumberSpaceStudentIDSpaceStudentName
但是,实现以下两个函数,我只在我的队列中无限次获得最后一个学生
int Start(advisee** front, advisee** rear) {
advisee* student, *walker;
FILE* infp;
student = (advisee*)malloc(sizeof(advisee));
infp = fopen("ToServe.txt", "r");
if(infp == NULL) {
return 0;
}
while(!feof(infp)) {
fscanf(infp, "%d", &student->ticket);
fscanf(infp, "%d", &student->ID);
fgets(student->name, 100, infp);
student->next = NULL;
enqueue(front, rear, student);
}
walker = *front;
fclose(infp);
return 1;
}
void enqueue(advisee** front, advisee** rear, advisee* ToAdd) {
if (*front == NULL)
*front = ToAdd;
else
(*rear)->next = ToAdd;
*rear = ToAdd;
}
答:
1赞
trincot
11/30/2021
#1
只分配了一个项目:
advisee* student = (advisee*)malloc(sizeof(advisee));
...循环只是不断改变单个 Advisee,并重复将相同的指针添加到队列中。因此,队列最终会得到指向单个建议的指针。
解决方案是在循环内移动分配。
下一个:FEOF 生成无限循环
评论
while(!feof(infp)) {
<<——谁教你的?stackoverflow.com/q/5431941/905902