修改init-list函数,运行结果不通过,求解mom
题目要求:函数原型:void init_list(GoodsList **L)
其中 *L 为指向链表头结点的指针,L为指向链表头结点指针的地址,init_list首先创建链表的头结点,之后读取goodsinfo.txt(示例文件下载)中的商品信息,并初始化链表,函数执行后,需确保 *L 为指向链表头结点的指针。
init_list 实现商品信息链表的初始化,函数从已有的商品信息文件goodsinfo.txt(示例文件下载)中读入商品信息,并且分配内存保存至链表中。
为了方便在表头插入和删除结点的操作,经常在表头结点(存储第一个元素的结点)的前面增加一个结点,称之为头结点或表头附加结点。这样原来的表头指针由指向第一个元素的结点改为指向头结点,头结点的数据域为空,头结点的指针域指向第一个元素的结点。
只需写出init_list函数即可,相关结构及函数声明如下:
```#define GOODS_FILE_NAME "goodsinfo.txt"
```c
```#define MAX_ID_LEN 30
#define MAX_NAME_LEN 30
#define MAX_PRICE_LEN 30
#define MAX_DISCOUNT_LEN 30
typedef struct {
char goods_id[MAX_ID_LEN];
char goods_name[MAX_NAME_LEN];
int goods_price;
char goods_discount[MAX_DISCOUNT_LEN];
int goods_amount;
int goods_remain;
} GoodsInfo;
typedef struct node
{
GoodsInfo data;
struct node *next;
} GoodsList;
GoodsInfo read_goods_info();
void init_list(GoodsList **pL);
void destory_list(GoodsList **pL);
void destory_list_and_file(GoodsList **pL);
int save_to_file(GoodsList *L);
void output_one_item(GoodsList *L);
void output_all_items(GoodsList *L);
bool insert_item(GoodsList *L, GoodsInfo item, int choice);
bool delete_item(GoodsList *L, char* goods_id);
GoodsList* search_item(GoodsList *L, char* goods_id);
bool change_item(GoodsList *L, char* goods_id, GoodsInfo new_info);
void bubble_sort(GoodsList *L);
int read_line(char str[], int n);
```c
该部分声明已包含在 “lab52.h”中。
我的代码:
```c
```#include <stdio.h>
#include <stdlib.h>
#include "lab52.h" // 请不要删除本行头文件,否则检查不通过
extern int CurrentCnt; // 请不要删除本行的全局变量声明,否则检查不通过
void init_list(GoodsList **L) {
GoodsInfo info;
GoodsList head_list=(GoodsList)malloc(sizeof(GoodsList)),*p;
*L=head_list;
FILE *fp=fopen("goodsinfo.txt","r");
if(fp==NULL){
printf("error: file not found");
```c
```exit(0);
```c
```}
```c
```else {
```c
```while(!feof(fp)) {
fscanf(fp,"%s%s%d%s%d%d",info.goods_id,info.goods_name,&(info.goods_price),info.goods_discount,&(info.goods_amount),&(info.goods_remain));
p=(GoodsList *)malloc(sizeof(GoodsList));
head_list->next=p;
head_list->data=info;
CurrentCnt++;
```c
``` }
}
fclose(fp);
p->next=NULL;
printf("商品的链表文件已建立,有%d个商品记录\n", CurrentCnt);
}
求解决!