struct chexinxi *duqu() { struct chexinxi *p,*head2,*pr; FILE *fp = fopen("车辆信息.txt", "r"); if(fp==NULL) { printf("\t\t\t\t打开文件失败!\n"); } else { while (fscanf(fp, "%s %s", chexinghao, chepaihao) != EOF) { struct chexinxi *p = (struct chexinxi*)malloc(sizeof(struct chexinxi)); strcpy(p->chexinghao, chexinghao); strcpy(p->chepaihao, chepaihao); p->next = NULL; if (head2 == NULL) { head2 = p; } else { struct chexinxi *pr = head; while (pr->next != NULL) { pr=pr->next; } pr->next = p; } } fclose(fp); } return head2; }为什么错了
时间: 2024-01-19 21:03:02 浏览: 66
bbs.rar_struct2
这段代码中存在几个问题:
1. 在函数中,`head2`没有被初始化,而在第一次使用时直接判断是否为NULL,这会导致未定义的行为。应该在函数开始时将其初始化为NULL。
2. 在while循环中,使用了一个新的指针变量`p`,但是在内部并没有将其赋值给外部的`head2`,这意味着即使在循环中成功地创建了新的节点,也不会将其添加到链表中。
3. 在`else`分支中,将`pr`初始化为`head`,但是`head`并没有在函数中声明或初始化,这也会导致未定义的行为。
4. 在`else`分支中,将新节点添加到链表末尾的代码有误,应该先将`pr`移动到链表的末尾,然后再将新节点添加到末尾。
针对以上问题,可以将代码修改为以下形式:
```
struct chexinxi *duqu() {
struct chexinxi *head2 = NULL;
struct chexinxi *p, *pr;
char chexinghao[20], chepaihao[20];
FILE *fp = fopen("车辆信息.txt", "r");
if (fp == NULL) {
printf("\t\t\t\t打开文件失败!\n");
} else {
while (fscanf(fp, "%s %s", chexinghao, chepaihao) != EOF) {
p = (struct chexinxi*)malloc(sizeof(struct chexinxi));
strcpy(p->chexinghao, chexinghao);
strcpy(p->chepaihao, chepaihao);
p->next = NULL;
if (head2 == NULL) {
head2 = p;
} else {
pr = head2;
while (pr->next != NULL) {
pr = pr->next;
}
pr->next = p;
}
}
fclose(fp);
}
return head2;
}
```
这样应该可以解决代码中的问题。
阅读全文