请用C语言应用链表写一个文件读取函数 要求为:读取的文件名为product.txt,读取顺序为商品编号、商品名称、生产商、生产日期、商品价格、商品数量 函数接口为:void product *load(struct product *head) 文件中的数据储存样例为:1,1,1 ,1,1.00,1 2,22,2 ,2,2.00,2 链表为:struct product{ int productnum; char name[20]; char producer[20]; char date[9]; float price; int amount; struct protuct *next; }; 文件写入函数为:void writefile(struct product *head) { if(head == NULL) { printf("暂无商品信息,无法保存!\n"); return; } FILE *fp; fp = fopen("product.txt", "w"); if (fp == NULL) { printf("无法创建文件!\n"); return; } struct product *p = head; while (p != NULL) { fprintf(fp, "%d,%s,%s,%s,%.2f,%d\n", p->productnum, p->name, p->producer, p->date, p->price, p->amount); p = p->next; } fclose(fp); printf("商品信息已经保存到文件中!\n"); }
时间: 2024-03-26 22:34:50 浏览: 149
以下是一个使用链表读取文件的C语言函数load()的实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct product{
int productnum;
char name[20];
char producer[20];
char date[9];
float price;
int amount;
struct product *next;
};
void load(struct product **head) {
FILE *fp;
char buffer[100];
char *token;
fp = fopen("product.txt", "r");
if (fp == NULL) {
printf("文件不存在!\n");
return;
}
while (fgets(buffer, 100, fp) != NULL) {
struct product *new_product = (struct product*) malloc(sizeof(struct product));
token = strtok(buffer, ",");
new_product->productnum = atoi(token);
token = strtok(NULL, ",");
strcpy(new_product->name, token);
token = strtok(NULL, ",");
strcpy(new_product->producer, token);
token = strtok(NULL, ",");
strcpy(new_product->date, token);
token = strtok(NULL, ",");
new_product->price = atof(token);
token = strtok(NULL, ",");
new_product->amount = atoi(token);
new_product->next = *head;
*head = new_product;
}
fclose(fp);
}
```
这个函数的实现方式是逐行读取文件,然后使用strtok()函数将每一行拆分成对应的数据,并将它们存储到一个新的结构体中。然后将这个新结构体插入到链表的头部。最后,我们关闭文件并返回链表头指针。
注意:该函数中传入的参数是指向指针的指针,这是因为我们需要改变链表的头指针。
阅读全文