作者:柠檬i,学习C时长两个月半的个人练习生
第一次写文章,难免有些不足,请多多包涵。
本程序主要功能是建立链表,然后把链表数据存储到文件中,然后把文件数据存储到数组中并输出。
不多说了,放代码。
建立链表并输入数据到链表里 代码如下:
typedef struct stu { char name[20]; char adr[20]; int tel; struct stu* pnext; } stu; int n; //n存着信息条数 stu* phead=NULL;//phead为链表首地址 void Create() //建立链表 { stu *pend,*pnew;//尾节点,新节点 pend=phead =(stu*)malloc(sizeof(stu));//分配内存给首节点 printf("please first input Name, Adress and telephone:\n"); for(int i=0;i<n;i++) { pnew=(stu*)malloc(sizeof(stu)); //分配新节点 pend->pnext=pnew; //原来的尾节点指向新节点 pnew->pnext=NULL; //新节点的指针为NULL printf("NO.%d: ",i+1); scanf("%s", pend->name); scanf("%s", pend->adr); scanf("%d",&pend->tel); pend=pnew; //赋值后指向尾节点 } pnew=pnew->pnext;//指向NULL free(pnew); //释放pnew内存 }此处用到了fopen、fprintf、fclose等文件操作函数
代码如下:
void save(char *filename) { FILE *w;//文件指针 if ((w = fopen(filename, "wb")) == NULL){ /*二进制只写打开文件*/ printf("cannot open file\n"); exit(1); } for (int i = 0; i < n; i++) //链表数据循环输入到文件内 { fprintf(w,"%s ",phead->name); fprintf(w,"%s ",phead->adr); fprintf(w,"%d", phead->tel); fprintf(w,"%s","\r\n");//换行 phead=phead->pnext;//指向下一个节点 } fclose(w); //关闭文件 }先把文件内容保存到结构体数组内,然后再通过数组输出到屏幕上。 代码如下:
void show(char *filename) //输出文件 { FILE *fp;//文件指针 stu info[100]; //负责存放文件中的数据,然后输出 if ((fp = fopen(filename, "rb")) == NULL){ /*二进制只读打开文件*/ printf("cannot open file\n"); exit(1); } for (int i = 0; i < n; i++) { fscanf(fp,"%s",&(info[i].name));//输出数据到数组 fscanf(fp,"%s",&(info[i].adr)); fscanf(fp,"%d",&(info[i].tel)); printf("ssd\n", info[i].name, info[i].adr, info[i].tel); //输出数据到屏幕 } fclose(fp); //关闭文件 }我尝试过fread和fwrite的做法,但都失败了。
参考文章: c语言链表数据存入文件和读取文件