您好,登錄后才能下訂單哦!
今天小編給大家分享一下C語言怎么實現鏈表與文件存取的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
int main(void) { char filename[50]; printf("How many ?: "); scanf("%d", &n); /*輸入學生數*/ printf("please input filename: "); scanf("%s", filename); /*輸入文件所在路徑及名稱*/ Create(); //調用函數建立鏈表 save(filename); //調用函數存到文件 free(phead);//釋放phead內存 show(filename); //調用函數輸出文件 system("pause"); return 0; }
建立鏈表并輸入數據到鏈表里
代碼如下:
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("%10s%15s%15d\n", info[i].name, info[i].adr, info[i].tel); //輸出數據到屏幕 } fclose(fp); //關閉文件 }
/*此代碼為《C語言從入門到精通(第二版)》第十四章(文件)的【例14.7】的改進版*/ #include<stdio.h> #include<stdlib.h> #include<process.h> 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內存 } 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("%10s%15s%15d\n", info[i].name, info[i].adr, info[i].tel);//輸出數據到屏幕 } fclose(fp);/*關閉文件*/ } int main(void) { char filename[50]; printf("How many ?:\n"); scanf("%d", &n); /*輸入學生數*/ printf("please input filename: "); scanf("%s", filename); /*輸入文件所在路徑及名稱*/ Create(); //調用函數建立鏈表 save(filename); //調用函數存到文件 free(phead);//釋放phead內存 show(filename); //調用函數輸出文件 system("pause"); return 0; }
以上就是“C語言怎么實現鏈表與文件存取”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。