链接列表循环迭代改变全局变量头

时间:2015-02-08 22:43:14

标签: c loops pointers linked-list text-files

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

struct node{ char name[50]; int id; struct node* next; }*head;

使用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

1 个答案:

答案 0 :(得分:1)

您必须先设置temp=temp->next ,然后再分配temp->nametemp->id,否则您将覆盖之前的内容节点的数据。