gpt4 book ai didi

c - 链表循环迭代改变全局变量头

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

当我尝试使用 while 循环建立链表时,循环的第二次迭代更改了全局头。这些值从文件读入字符串(缓冲区),然后进行标记以建立 .name 和 .id 的值。底层代码用于建立全局头。

结构节点{
字符名称[50];
整数ID;
结构节点*下一个;
}*头;

使用 print 语句,我设计了 head.name 和 head.id 在循环的第二次迭代中更改。如果有人有任何建议,请提出,我们将不胜感激。

int read(){
char buffer[500];
char name[50];
int id;
struct node *temp;
head = NULL;
FILE *fp = fopen("AssignmentOneInput.txt", "r");
if(fp == NULL){
printf("Cant read.\n");
return 0;
}
fgets(buffer, 500, fp);
head = malloc(sizeof(struct node));
strcpy(head->name, strtok(buffer, ","));
head->id = atoi(strtok(NULL, ","));
temp = head;
printf("%s\n", head->name);
printf("%d\n", head->id);
while(!feof(fp)){
fgets(buffer, 500, fp);
printf("%s\n", head->name);
printf("%d\n", head->id);
temp->next = malloc(sizeof(struct node));
strcpy(temp->name, strtok(buffer, ","));
temp->id = atoi(strtok(NULL, ","));
temp = temp->next;
if(temp == NULL){
fclose(fp);
return 1;
}
}}

文件AssignmentOneInput.txt包含以以下格式存储的值,尽管有大约20个而不是给定的1个:

George Washington, 2345678

最佳答案

您需要设置temp=temp->next之前分配temp->nametemp->id 而不是在这样做之后,否则您将覆盖前一个节点的数据。

关于c - 链表循环迭代改变全局变量头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28400248/

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