C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)

這篇“C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)”文章吧。

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括三都網(wǎng)站建設(shè)、三都網(wǎng)站制作、三都網(wǎng)頁制作以及三都網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,三都網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到三都省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

    前言

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

    一、題目

    實(shí)驗(yàn) I/O流設(shè)計(jì)

    一、 實(shí)驗(yàn)?zāi)康模?/p>

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

    二、 實(shí)驗(yàn)時(shí)間:

    三、 實(shí)驗(yàn)地點(diǎn):

    四、 實(shí)驗(yàn)內(nèi)容:

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

    2.編程將2個(gè)文件的內(nèi)容連成一個(gè)文件。

    3.編寫程序,給一個(gè)文本文件加上行號(hào)后存到另外一個(gè)文件中。

    五、實(shí)驗(yàn)要求:在上機(jī)前寫出全部源程序;

    六、實(shí)驗(yàn)結(jié)果分析:

    二、代碼及效果

    [1]. 第一問

    C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)

    C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)

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

    • student.dat文件不需要提前創(chuàng)建

    • 使用了一個(gè)結(jié)構(gòu)體數(shù)組存儲(chǔ)學(xué)生的學(xué)號(hào)、姓名、成績的信息。

    • 在輸入學(xué)生數(shù),將學(xué)生數(shù)作為文件的第一行以便之后的讀取

    • 在控制臺(tái)輸入每個(gè)學(xué)生信息的同時(shí),使用file1指針將當(dāng)前的學(xué)生數(shù)據(jù)存入文件

    • 需要注意的是存入文件時(shí),不會(huì)自動(dòng)換行,所以需要在信息末尾添加一個(gè)換行符

    • 因?yàn)樽x取文件時(shí)必須保證文件已存在,所以在關(guān)閉file1指針之后才使用fopen函數(shù)

    • 之后就是根據(jù)第一行的學(xué)生個(gè)數(shù),讀取學(xué)生的信息并顯示

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

    [2]. 第二問

    C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)

    C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)

    C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)

    C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)

    C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)

    • 剛開始時(shí)student1.dat和student2.dat必須已存在,student3.dat是之后合并數(shù)據(jù)產(chǎn)生的文件不需要提前創(chuàng)建。

    • 先是對student1.dat文件進(jìn)行讀取,存儲(chǔ)到結(jié)構(gòu)體數(shù)組stu1中

    • 再對student2.dat文件進(jìn)行讀取,存儲(chǔ)到結(jié)構(gòu)體數(shù)組stu2中

    • 將行數(shù)存到student3.dat文件的第一行

    • 然后分別遍歷stu1和stu2結(jié)構(gòu)體數(shù)組,存入數(shù)據(jù)

    #include<stdio.h>
    struct student{
        char number[20];//學(xué)號(hào)
        char name[20];//姓名
        int score;//成績
    }stu1[100],stu2[100];//學(xué)生結(jié)構(gòu)體數(shù)組
    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內(nèi)容
        fscanf(file1,"%d",&num1);//讀取第一行的學(xué)生個(gè)數(shù)
        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位學(xué)生: %s %s %d
    ",i+1,stu1[i].number,stu1[i].name,stu1[i].score);
        }
        //獲取文件2內(nèi)容
        fscanf(file2,"%d",&num2);//讀取第一行的學(xué)生個(gè)數(shù)
        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位學(xué)生: %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數(shù)組
            fprintf(file3,"%s %s %d
    ",stu1[i].number,stu1[i].name,stu1[i].score);
        }
        for(int i = 0;i < num1;i++){//遍歷stu2數(shù)組
            fprintf(file3,"%s %s %d
    ",stu2[i].number,stu2[i].name,stu2[i].score);
        }
        //printf("已將student1.dat和student2.dat內(nèi)容存入student3.dat");
        printf("復(fù)制成功!");
        fclose(file1);
        fclose(file2);
        fclose(file3);
        return ;
    }

    [3]. 第三問

    C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)

    C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)

    C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)

    C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)

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

    • 使用到了strcpy()函數(shù)用于復(fù)制字符數(shù)組的內(nèi)容到另一個(gè)字符數(shù)組,第一個(gè)參數(shù)表示的是目標(biāo)字符數(shù)組,第二個(gè)參數(shù)是需要復(fù)制原字符數(shù)組。

    • 使用了死循環(huán)對文件進(jìn)行遍歷,使用一個(gè)局部的字符數(shù)組str存儲(chǔ)當(dāng)前行數(shù)據(jù)

    • 當(dāng)執(zhí)行了if語句后,會(huì)做兩件事,一是將當(dāng)前行數(shù)據(jù)存儲(chǔ)到str數(shù)組,二是判斷是否讀取到文件末尾

    • 當(dāng)讀取結(jié)束就提示,并break出死循環(huán)。

    • 否則就將str字符數(shù)組復(fù)制給結(jié)構(gòu)體數(shù)組t的下標(biāo)為num的str字符數(shù)組中。

    • 然后下標(biāo)num自加,之后對結(jié)構(gòu)體數(shù)組t的遍歷范圍就是[0, num)

    • 遍歷結(jié)構(gòu)體數(shù)組,同時(shí)對文件stu2.dat文件進(jìn)行寫入的操作。

    • 由于下標(biāo)是從0開始的,所以行數(shù)就等于i+1

    #include<stdio.h>
    #include<string.h>
    struct text
    {
        char str[100];//字符數(shù)組,存儲(chǔ)每行的數(shù)據(jù)
    }t[100];//結(jié)構(gòu)體數(shù)組
    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){//若讀取到最后一行時(shí)
                printf("文件讀取結(jié)束!
    ");
                break;
            }else{
                strcpy(t[num].str,str);//將字符數(shù)組復(fù)制到結(jié)構(gòu)體數(shù)組
                num++;//定位到下一個(gè)結(jié)構(gòu)體
            }
        }
        //寫入文件
        for(int i = 0;i < num;i++){//遍歷結(jié)構(gòu)數(shù)組t
            //printf("%s
    ",t[i].str);
            fprintf(file2,"%d%s
    ",i+1,t[i].str);
        }
        fclose(file1);
        fclose(file2);
        return 0;
    }

    以上就是關(guān)于“C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

    當(dāng)前題目:C語言怎么實(shí)現(xiàn)I/O流設(shè)計(jì)
    文章網(wǎng)址:http://bm7419.com/article26/igiocg.html

    成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站維護(hù)、標(biāo)簽優(yōu)化、企業(yè)建站、網(wǎng)站營銷、域名注冊

    廣告

    聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

    網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司