中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言怎么實現鏈表與文件存取

發布時間:2022-04-25 16:11:12 來源:億速云 閱讀:262 作者:iii 欄目:開發技術

今天小編給大家分享一下C語言怎么實現鏈表與文件存取的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

此處為main函數的內容

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語言怎么實現鏈表與文件存取”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

当雄县| 淄博市| 离岛区| 上林县| 大方县| 华池县| 若尔盖县| 略阳县| 靖远县| 满洲里市| 西乌珠穆沁旗| 博客| 武陟县| 阿拉善左旗| 西充县| 泰宁县| 田阳县| 额济纳旗| 罗山县| 潞城市| 成武县| 岐山县| 东乌珠穆沁旗| 鄂温| 承德市| 绥棱县| 鞍山市| 威海市| 即墨市| 北宁市| 天津市| 伊吾县| 谢通门县| 林周县| 万源市| 红原县| 理塘县| 新沂市| 芷江| 长沙县| 阿拉善左旗|