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

溫馨提示×

溫馨提示×

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

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

C語言I/O流設計實例分析

發布時間:2022-03-23 17:28:12 來源:億速云 閱讀:156 作者:iii 欄目:web開發

這篇文章主要介紹了C語言I/O流設計實例分析的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C語言I/O流設計實例分析文章都會有所收獲,下面我們一起來看看吧。

    前言

    文件的讀取和寫入是使用的是fscanffprintf兩個函數,C語言中文件讀取的函數不止這兩個。文章中采用讀取文件的方式有兩個,輸入行數和使用EOF判斷文件末尾。 %s進行讀取時不需要使用取址符&,主要是用于輸入字符數組。

    環境CodeBlocks 文本閱讀軟件NotePadd++

    一、題目

    實驗 I/O流設計

    一、 實驗目的:

    熟悉文件流類的使用,掌握文件的打開、讀寫、關閉操作。

    二、 實驗時間:

    三、 實驗地點:

    四、 實驗內容:

    1.輸入任意多個學生的數據(學號,姓名,成績),將數據存放在student.dat文件中,然后從該文件中讀出所有數據并顯示。

    2.編程將2個文件的內容連成一個文件。

    3.編寫程序,給一個文本文件加上行號后存到另外一個文件中。

    五、實驗要求:在上機前寫出全部源程序;

    六、實驗結果分析:

    二、代碼及效果

    [1]. 第一問

    C語言I/O流設計實例分析

    C語言I/O流設計實例分析

    • 使用兩個文件指針,file1和file2指針分別用于寫文件和讀取文件,操作的都是student.dat文件。

    • student.dat文件不需要提前創建

    • 使用了一個結構體數組存儲學生的學號、姓名、成績的信息。

    • 在輸入學生數,將學生數作為文件的第一行以便之后的讀取

    • 在控制臺輸入每個學生信息的同時,使用file1指針將當前的學生數據存入文件

    • 需要注意的是存入文件時,不會自動換行,所以需要在信息末尾添加一個換行符

    • 因為讀取文件時必須保證文件已存在,所以在關閉file1指針之后才使用fopen函數

    • 之后就是根據第一行的學生個數,讀取學生的信息并顯示

    #include<stdio.h>
    struct student{
        char number[20];//學號
        char name[20];//姓名
        int score;//成績
    }stu[100];//學生結構體數組
    int main()
    {
        FILE *file1 = fopen("student.dat","w");//文件指針,寫
        FILE *file2;//文件指針,讀
        int i;
        int num = 0;//學生個數
        printf("學生個數:");
        scanf("%d",&num);
        fprintf(file1,"%d
    ",num);//將學生個數放在文件首行
        for(int i = 0;i < num;i++){//輸入學生信息
            printf("第%d位學生
    ",i+1);
            printf("學號: ");
            scanf("%s", stu[i].number);//學號
            printf("姓名: ");
            scanf("%s", stu[i].name);//姓名
            printf("成績: ");
            scanf("%d", &stu[i].score);//成績
            //存入文件
            fprintf(file1,"%s %s %d
    ",stu[i].number,stu[i].name,stu[i].score);
        }
        fclose(file1);//關閉文件指針
        file2 = fopen("student.dat","r");//讀取文件
        fscanf(file2,"%d",&num);//讀取第一行的學生個數
        //printf("%d
    ",num);
        for(int i = 0;i < num;i++){//顯示文件的數據
            //局部變量
            char number[20];
            char name[20];
            int score;
            //獲取當前行的數據
            fscanf(file2,"%s",number);
            fscanf(file2,"%s",name);
            fscanf(file2,"%d",&score);
            //打印
            printf("第%d位學生: %s %s %d
    ",i+1,number,name,score);
        }
        fclose(file2);
        return 0;
    }

    [2]. 第二問

    C語言I/O流設計實例分析

    C語言I/O流設計實例分析

    C語言I/O流設計實例分析

    C語言I/O流設計實例分析

    C語言I/O流設計實例分析

    • 剛開始時student1.dat和student2.dat必須已存在,student3.dat是之后合并數據產生的文件不需要提前創建。

    • 先是對student1.dat文件進行讀取,存儲到結構體數組stu1中

    • 再對student2.dat文件進行讀取,存儲到結構體數組stu2中

    • 將行數存到student3.dat文件的第一行

    • 然后分別遍歷stu1和stu2結構體數組,存入數據

    #include<stdio.h>
    struct student{
        char number[20];//學號
        char name[20];//姓名
        int score;//成績
    }stu1[100],stu2[100];//學生結構體數組
    int main()
    {
        int i,num1,num2;
        char file_name1[20];
        char file_name2[20];
        char file_name3[20];
        FILE *file1,*file2,*file3;//文件指針
        file1 = fopen("student1.dat","r");//讀取文件1
        file2 = fopen("student2.dat","r");//讀取文件2
        file3 = fopen("student3.dat","w");//寫入文件3
        //獲取文件1內容
        fscanf(file1,"%d",&num1);//讀取第一行的學生個數
        for(int i = 0;i < num1;i++){
            fscanf(file1,"%s",stu1[i].number);
            fscanf(file1,"%s",stu1[i].name);
            fscanf(file1,"%d",&stu1[i].score);
            //printf("第%d位學生: %s %s %d
    ",i+1,stu1[i].number,stu1[i].name,stu1[i].score);
        }
        //獲取文件2內容
        fscanf(file2,"%d",&num2);//讀取第一行的學生個數
        for(int i = 0;i < num2;i++){
            fscanf(file2,"%s",stu2[i].number);
            fscanf(file2,"%s",stu2[i].name);
            fscanf(file2,"%d",&stu2[i].score);
            //printf("第%d位學生: %s %s %d
    ",i+1,stu2[i].number,stu2[i].name,stu2[i].score);
        }
        //寫入文件3
        fprintf(file3,"%d
    ",num1+num2);
        for(int i = 0;i < num1;i++){//遍歷stu1數組
            fprintf(file3,"%s %s %d
    ",stu1[i].number,stu1[i].name,stu1[i].score);
        }
        for(int i = 0;i < num1;i++){//遍歷stu2數組
            fprintf(file3,"%s %s %d
    ",stu2[i].number,stu2[i].name,stu2[i].score);
        }
        //printf("已將student1.dat和student2.dat內容存入student3.dat");
        printf("復制成功!");
        fclose(file1);
        fclose(file2);
        fclose(file3);
        return ;
    }

    [3]. 第三問

    C語言I/O流設計實例分析

    C語言I/O流設計實例分析

    C語言I/O流設計實例分析

    C語言I/O流設計實例分析

    • EOF是文件結束的標志,即End OF File,如果你讀取到的字符串等于EOF就表示讀取到了文件的末尾,就可以退出遍歷讀取的操作。

    • 使用到了strcpy()函數用于復制字符數組的內容到另一個字符數組,第一個參數表示的是目標字符數組,第二個參數是需要復制原字符數組。

    • 使用了死循環對文件進行遍歷,使用一個局部的字符數組str存儲當前行數據

    • 當執行了if語句后,會做兩件事,一是將當前行數據存儲到str數組,二是判斷是否讀取到文件末尾

    • 當讀取結束就提示,并break出死循環。

    • 否則就將str字符數組復制給結構體數組t的下標為num的str字符數組中。

    • 然后下標num自加,之后對結構體數組t的遍歷范圍就是[0, num)

    • 遍歷結構體數組,同時對文件stu2.dat文件進行寫入的操作。

    • 由于下標是從0開始的,所以行數就等于i+1

    #include<stdio.h>
    #include<string.h>
    struct text
    {
        char str[100];//字符數組,存儲每行的數據
    }t[100];//結構體數組
    int main(){
        FILE *file1 = fopen("stu1.dat","r");//文件指針,讀
        FILE *file2 = fopen("stu2.dat","w");//文件指針,寫
        int i,num = 0;
        //讀
        while(1){//遍歷文件stu1.dat
            char str[100];
            if(fscanf(file1,"%s",str)==EOF){//若讀取到最后一行時
                printf("文件讀取結束!
    ");
                break;
            }else{
                strcpy(t[num].str,str);//將字符數組復制到結構體數組
                num++;//定位到下一個結構體
            }
        }
        //寫入文件
        for(int i = 0;i < num;i++){//遍歷結構數組t
            //printf("%s
    ",t[i].str);
            fprintf(file2,"%d%s
    ",i+1,t[i].str);
        }
        fclose(file1);
        fclose(file2);
        return 0;
    }

    關于“C語言I/O流設計實例分析”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C語言I/O流設計實例分析”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

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

    AI

    神木县| 化州市| 寿宁县| 新乐市| 徐水县| 遵化市| 亚东县| 铜梁县| 宁海县| 皋兰县| 玉田县| 固始县| 元朗区| 敦化市| 贡觉县| 桦南县| 新宁县| 三亚市| 洪洞县| 横峰县| 武夷山市| 邻水| 新津县| 碌曲县| 工布江达县| 伽师县| 西畴县| 正安县| 大冶市| 安吉县| 图木舒克市| 寿阳县| 洪雅县| 万载县| 拜城县| 兴国县| 甘孜| 济南市| 共和县| 铁力市| 双桥区|