void import_student(stu *head)//导入学籍信息文件 登录 { FILE *fp = fopen("学生学籍管理系统.txt", "r"); if (fp == NULL) { printf("文件打开失败\n"); return; } stu *p1=(stu*) malloc(sizeof(stu)); while (fscanf(fp,"%d %s %s %d %s %s %s %d %s", &p1->id,p1->name,p1->gender,&p1->age, p1->native_place,p1->department,p1->specialty,&p1->cla,p1->xjbh) != EOF) { stu *p1=(stu*) malloc(sizeof(stu)); stu *p2=head->next; p1->next=head->next; head->next=p1; } printf("数据导入完成!\n\n"); fclose(fp); }这段代码有什么错误
时间: 2023-06-24 19:08:23 浏览: 55
这段代码存在一些错误:
1. 在第 9 行中,应该先为学生结构体分配内存,再读取数据。因为在循环中每次都需要为新的学生结构体分配内存。
2. 在第 12 行中,应该将读取的字符串类型的数据使用 %s 进行读取,而不是 %c。
3. 在第 18 行中,应该将新分配的学生结构体 p1 的指针赋值给 p2 的 next 指针,而不是将 p2 的指针赋值给 p1 的 next 指针。
下面是修改后的代码:
```
void import_student(stu *head) // 导入学籍信息文件登录
{
FILE *fp = fopen("学生学籍管理系统.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
stu *p1, *p2;
while ((p1 = (stu*) malloc(sizeof(stu))) &&
fscanf(fp, "%d %s %s %d %s %s %s %d %s",
&p1->id, p1->name, p1->gender, &p1->age,
p1->native_place, p1->department, p1->specialty, &p1->cla, p1->xjbh) != EOF) {
p2 = head->next;
p1->next = p2;
head->next = p1;
}
printf("数据导入完成!\n\n");
fclose(fp);
}
```