最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言-I/O流設(shè)計實驗

 更新時間:2021年07月08日 11:05:40   作者:小狐貍FM  
編程語言的I/O類庫中常常使用流這個抽象的概念,它代表任何有能力產(chǎn)生數(shù)據(jù)的數(shù)據(jù)源對象或時有能力接收數(shù)據(jù)的接收端對象,本文為大家介紹C語言中I/O系統(tǒng)基礎(chǔ)知識

前言

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

環(huán)境CodeBlocks 文本閱讀軟件NotePadd++

一、題目

實驗 I/O流設(shè)計

一、 實驗?zāi)康模?/p>

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

二、 實驗時間:

三、 實驗地點:

四、 實驗內(nèi)容:

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

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

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

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

六、實驗結(jié)果分析:

二、代碼及效果

[1]. 第一問

在這里插入圖片描述

在這里插入圖片描述

  • 使用兩個文件指針,file1和file2指針分別用于寫文件和讀取文件,操作的都是student.dat文件。
  • student.dat文件不需要提前創(chuàng)建
  • 使用了一個結(jié)構(gòu)體數(shù)組存儲學(xué)生的學(xué)號、姓名、成績的信息。
  • 在輸入學(xué)生數(shù),將學(xué)生數(shù)作為文件的第一行以便之后的讀取
  • 在控制臺輸入每個學(xué)生信息的同時,使用file1指針將當前的學(xué)生數(shù)據(jù)存入文件
  • 需要注意的是存入文件時,不會自動換行,所以需要在信息末尾添加一個換行符\n
  • 因為讀取文件時必須保證文件已存在,所以在關(guān)閉file1指針之后才使用fopen函數(shù)
  • 之后就是根據(jù)第一行的學(xué)生個數(shù),讀取學(xué)生的信息并顯示
#include<stdio.h>
struct student{
    char number[20];//學(xué)號
    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é)生個數(shù)
    printf("學(xué)生個數(shù):");
    scanf("%d",&num);
    fprintf(file1,"%d\n",num);//將學(xué)生個數(shù)放在文件首行
    for(int i = 0;i < num;i++){//輸入學(xué)生信息
        printf("第%d位學(xué)生\n",i+1);
        printf("學(xué)號: ");
        scanf("%s", stu[i].number);//學(xué)號
        printf("姓名: ");
        scanf("%s", stu[i].name);//姓名
        printf("成績: ");
        scanf("%d", &stu[i].score);//成績
        //存入文件
        fprintf(file1,"%s %s %d\n",stu[i].number,stu[i].name,stu[i].score);
    }
    fclose(file1);//關(guān)閉文件指針
    file2 = fopen("student.dat","r");//讀取文件
    fscanf(file2,"%d",&num);//讀取第一行的學(xué)生個數(shù)
    //printf("%d\n",num);
    for(int i = 0;i < num;i++){//顯示文件的數(shù)據(jù)
        //局部變量
        char number[20];
        char name[20];
        int score;
        //獲取當前行的數(shù)據(jù)
        fscanf(file2,"%s",number);
        fscanf(file2,"%s",name);
        fscanf(file2,"%d",&score);
        //打印
        printf("第%d位學(xué)生: %s %s %d\n",i+1,number,name,score);
    }
    fclose(file2);
    return 0;
}

[2]. 第二問

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

  • 剛開始時student1.dat和student2.dat必須已存在,student3.dat是之后合并數(shù)據(jù)產(chǎn)生的文件不需要提前創(chuàng)建。
  • 先是對student1.dat文件進行讀取,存儲到結(jié)構(gòu)體數(shù)組stu1中
  • 再對student2.dat文件進行讀取,存儲到結(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é)號
    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é)生個數(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\n",i+1,stu1[i].number,stu1[i].name,stu1[i].score);
    }
    //獲取文件2內(nèi)容
    fscanf(file2,"%d",&num2);//讀取第一行的學(xué)生個數(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\n",i+1,stu2[i].number,stu2[i].name,stu2[i].score);
    }
    //寫入文件3
    fprintf(file3,"%d\n",num1+num2);
    for(int i = 0;i < num1;i++){//遍歷stu1數(shù)組
        fprintf(file3,"%s %s %d\n",stu1[i].number,stu1[i].name,stu1[i].score);
    }
    for(int i = 0;i < num1;i++){//遍歷stu2數(shù)組
        fprintf(file3,"%s %s %d\n",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]. 第三問

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

  • EOF是文件結(jié)束的標志,即End OF File,如果你讀取到的字符串等于EOF就表示讀取到了文件的末尾,就可以退出遍歷讀取的操作。
  • 使用到了strcpy()函數(shù)用于復(fù)制字符數(shù)組的內(nèi)容到另一個字符數(shù)組,第一個參數(shù)表示的是目標字符數(shù)組,第二個參數(shù)是需要復(fù)制原字符數(shù)組。
  • 使用了死循環(huán)對文件進行遍歷,使用一個局部的字符數(shù)組str存儲當前行數(shù)據(jù)
  • 當執(zhí)行了if語句后,會做兩件事,一是將當前行數(shù)據(jù)存儲到str數(shù)組,二是判斷是否讀取到文件末尾
  • 當讀取結(jié)束就提示,并break出死循環(huán)。
  • 否則就將str字符數(shù)組復(fù)制給結(jié)構(gòu)體數(shù)組t的下標為num的str字符數(shù)組中。
  • 然后下標num自加,之后對結(jié)構(gòu)體數(shù)組t的遍歷范圍就是[0, num)
  • 遍歷結(jié)構(gòu)體數(shù)組,同時對文件stu2.dat文件進行寫入的操作。
  • 由于下標是從0開始的,所以行數(shù)就等于i+1
#include<stdio.h>
#include<string.h>
struct text
{
    char str[100];//字符數(shù)組,存儲每行的數(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){//若讀取到最后一行時
            printf("文件讀取結(jié)束!\n");
            break;
        }else{
            strcpy(t[num].str,str);//將字符數(shù)組復(fù)制到結(jié)構(gòu)體數(shù)組
            num++;//定位到下一個結(jié)構(gòu)體
        }
    }
    //寫入文件
    for(int i = 0;i < num;i++){//遍歷結(jié)構(gòu)數(shù)組t
        //printf("%s\n",t[i].str);
        fprintf(file2,"%d%s\n",i+1,t[i].str);
    }
    fclose(file1);
    fclose(file2);
    return 0;
}

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語言實現(xiàn)經(jīng)典windows游戲掃雷的示例代碼

    C語言實現(xiàn)經(jīng)典windows游戲掃雷的示例代碼

    今天我們會用C語言實現(xiàn)一個經(jīng)典的windows小游戲:掃雷。掃雷是一款單機小游戲,每次通關(guān)最高難度的關(guān)卡都會開心好一陣?,F(xiàn)在學(xué)會了C語言,總算可以自己實現(xiàn)掃雷了。話不多說,咱們開始吧
    2022-10-10
  • C語言之如何用isspace()和ungetc()實現(xiàn)前導(dǎo)空白字符過濾

    C語言之如何用isspace()和ungetc()實現(xiàn)前導(dǎo)空白字符過濾

    這篇文章主要介紹了C語言如何用isspace()和ungetc()實現(xiàn)前導(dǎo)空白字符過濾問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • C語言程序的編譯與預(yù)處理詳解

    C語言程序的編譯與預(yù)處理詳解

    這篇文章主要介紹了C語言程序的編譯與預(yù)處理,包括介紹了C和C++混合編程的情況,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • C++結(jié)構(gòu)體中變長數(shù)組的使用問題分解刨析

    C++結(jié)構(gòu)體中變長數(shù)組的使用問題分解刨析

    變長數(shù)組在C++中指的是集合(也叫容器)如vector就是C語言中,所有的數(shù)組都不定長,沒有下標越界的概念,數(shù)組實質(zhì)就是一個指針(由數(shù)組名充當)因此C語言中數(shù)組的長度沒有任何意義平常在C語言中講的不定長數(shù)組,其實就是指針
    2022-08-08
  • 介紹C語言程序中的注釋等輔助語句如何使用

    介紹C語言程序中的注釋等輔助語句如何使用

    C語言中分為單行注釋和多行注釋:單行注釋?以?//?開始的這一行文本,可能不被編譯器所支持;多行注釋從?/*?到?*/之間的所有文本,不支持嵌套,下面讓我們詳細來了解
    2022-04-04
  • C語言如何輸出中文

    C語言如何輸出中文

    這篇文章主要介紹了C語言如何輸出中文問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • VS?Code安裝及C、C++環(huán)境配置詳細教程(Windows系統(tǒng))

    VS?Code安裝及C、C++環(huán)境配置詳細教程(Windows系統(tǒng))

    這篇文章主要介紹了VS?Code安裝及C、C++環(huán)境配置詳細教程(Windows系統(tǒng)),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • c語言?數(shù)據(jù)存儲與原碼?反碼?補碼詳細解析

    c語言?數(shù)據(jù)存儲與原碼?反碼?補碼詳細解析

    不知道你是否和我一樣好奇,學(xué)習(xí)編程語言的同時想,各個數(shù)據(jù)類型是怎樣在我們的內(nèi)存中儲存的呢,如果你仔細深入了解的話,你會了解其中的樂趣,了解科學(xué)家們的偉大,了解c語言
    2022-02-02
  • c++11&14-STL要點匯總

    c++11&14-STL要點匯總

    這篇文章主要介紹了c++11&14中的STL要點,文中代碼簡單易懂,方便大家更好的學(xué)習(xí)參考,感興趣的朋友可以了解下
    2020-06-06
  • 深入探討C++ OpenCV如何實現(xiàn)圖像矯正

    深入探討C++ OpenCV如何實現(xiàn)圖像矯正

    這篇文章主要為大家詳細介紹了C++ OpenCV如何實現(xiàn)簡單的圖像矯正功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03

最新評論

吉首市| 桦川县| 常德市| 克东县| 十堰市| 钦州市| 苏尼特右旗| 白银市| 多伦县| 和硕县| 民权县| 巴里| 普兰店市| 博湖县| 裕民县| 格尔木市| 南岸区| 东源县| 谷城县| 乌兰浩特市| 楚雄市| 盈江县| 扎鲁特旗| 凤阳县| 上栗县| 衡水市| 平江县| 始兴县| 泰州市| 集贤县| 中阳县| 土默特右旗| 湖南省| 莱阳市| 星座| 丘北县| 普兰店市| 阿拉善右旗| 句容市| 三台县| 房山区|