日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言向文件写入内容并读取显示

發(fā)布時(shí)間:2024/8/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言向文件写入内容并读取显示 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
將學(xué)生信息(姓名、年齡、學(xué)號(hào)和平均分)寫(xiě)入文件,然后讀取顯示出來(lái)。

要求:
  • 從控制臺(tái)輸入學(xué)生信息;
  • 可以輸入任意數(shù)目的學(xué)生信息;
  • 文件每行存儲(chǔ)一條學(xué)生信息,姓名、年齡、學(xué)號(hào)、平均分以tab(\t)為分隔。

代碼實(shí)現(xiàn): 復(fù)制純文本復(fù)制
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <errno.h>
  • ?
  • #define FILE_PATH "D:/demo.txt" // 文件路徑
  • ?
  • int main(){
  • char name[20]; // 姓名
  • int age; // 年齡
  • int studNo; // 學(xué)號(hào)
  • float score; // 平均分
  • FILE *fp; // 文件指針
  • // 判斷文件是否能夠正確創(chuàng)建/打開(kāi)
  • if( (fp=fopen(FILE_PATH,"wt+")) == NULL ){
  • perror(FILE_PATH);
  • exit(1);
  • }
  • // 從控制臺(tái)輸入學(xué)生信息并寫(xiě)入文件
  • printf("請(qǐng)輸入姓名、年齡、學(xué)號(hào)和平均分(以空格分隔):\n");
  • while(scanf("%s %d %d %f", name, &age, &studNo, &score)!= EOF){
  • fprintf(fp,"%s\t%d\t%d\t%f\n", name, age, studNo, score);
  • }
  • // 刷新緩沖區(qū),將緩沖區(qū)的內(nèi)容寫(xiě)入文件
  • fflush(fp);
  • // 重置文件內(nèi)部位置指針,讓位置指針指向文件開(kāi)頭
  • rewind(fp);
  • ?
  • // 從文件中讀取學(xué)生信息
  • printf("\n讀取文件內(nèi)容:\n");
  • while(fscanf(fp, "%s\t%d\t%d\t%f", name, &age, &studNo, &score) != EOF){
  • printf("%s %d %d %f\n", name, age, studNo, score);
  • }
  • fclose(fp);
  • ?
  • return EXIT_SUCCESS;
  • }
  • #include <stdio.h> #include <stdlib.h> #include <errno.h>#define FILE_PATH "D:/demo.txt" // 文件路徑int main(){char name[20]; // 姓名 int age; // 年齡 int studNo; // 學(xué)號(hào) float score; // 平均分 FILE *fp; // 文件指針 // 判斷文件是否能夠正確創(chuàng)建/打開(kāi) if( (fp=fopen(FILE_PATH,"wt+")) == NULL ){perror(FILE_PATH);exit(1);}// 從控制臺(tái)輸入學(xué)生信息并寫(xiě)入文件printf("請(qǐng)輸入姓名、年齡、學(xué)號(hào)和平均分(以空格分隔):\n");while(scanf("%s %d %d %f", name, &age, &studNo, &score)!= EOF){fprintf(fp,"%s\t%d\t%d\t%f\n", name, age, studNo, score);}// 刷新緩沖區(qū),將緩沖區(qū)的內(nèi)容寫(xiě)入文件 fflush(fp);// 重置文件內(nèi)部位置指針,讓位置指針指向文件開(kāi)頭rewind(fp);// 從文件中讀取學(xué)生信息printf("\n讀取文件內(nèi)容:\n");while(fscanf(fp, "%s\t%d\t%d\t%f", name, &age, &studNo, &score) != EOF){printf("%s %d %d %f\n", name, age, studNo, score);}fclose(fp);return EXIT_SUCCESS; } 運(yùn)行結(jié)果: 請(qǐng)輸入姓名、年齡、學(xué)號(hào)和平均分(以空格分隔): 棍哥 25 1 99.99 碼農(nóng)宿舍 2 3 89.9 www.coderbbs.com 3 2 100 ^Z // ^Z 為 Ctrl+Z 組合鍵,表示輸入結(jié)束讀取文件內(nèi)容: 棍哥 25 1 99.989998 碼農(nóng)宿舍 2 3 89.900002 www.coderbbs.com 3 2 100.000000
    用記事本打開(kāi) D:/demo.txt,可以看到剛才輸入的內(nèi)容。

    程序主要分為三個(gè)步驟。

    1) 以讀寫(xiě)方式打開(kāi)文件

    wt+ 表示以讀寫(xiě)方式打開(kāi)文本文件,如果文件不存在,則創(chuàng)建,如果存在,清空內(nèi)容。

    perror() 函數(shù)在程序退出前,輸出具體的錯(cuò)誤信息。

    2) 從控制臺(tái)獲取學(xué)生信息,并寫(xiě)入文件

    通過(guò)while循環(huán)不斷讀取學(xué)生信息,沒(méi)有限制具體數(shù)目,按 Ctrl+Z 組合鍵結(jié)束輸入。Ctrl+Z表示文件輸入結(jié)束,即EOF。

    注意:fprintf() 函數(shù)并不在結(jié)尾自動(dòng)添加換行符(\n),顯示增加換行符的目的是:
    • 用記事本打開(kāi)文件后可以清晰的看到學(xué)生信息,一個(gè)學(xué)生占據(jù)一行;否則所有學(xué)生信息都在一行,閱讀困難。
    • 后續(xù)讀取文件時(shí),fscanf() 以換行符為讀取結(jié)束標(biāo)志,沒(méi)有換行符將不能正確讀取數(shù)據(jù),這一點(diǎn)與 scanf() 類似。

    兩點(diǎn)說(shuō)明:
    • 輸入結(jié)束時(shí)并沒(méi)有將輸入內(nèi)容保存到文件,而是停留在緩沖區(qū),導(dǎo)致后邊讀取文件時(shí)沒(méi)有內(nèi)容。所以必須通過(guò) fflush() 函數(shù)刷新緩沖區(qū),將緩沖區(qū)中的內(nèi)容寫(xiě)入文件。
    • 將緩沖區(qū)的內(nèi)容寫(xiě)入文件后,文件內(nèi)部位置指針實(shí)際指向了文件結(jié)尾,必須重置位置指針,否則后續(xù)讀取會(huì)出錯(cuò)。rewind() 函數(shù)將位置指針重置到文件開(kāi)頭。

    3) 再?gòu)奈募凶x取學(xué)生信息

    fscanf() 每次讀取一行信息。

    總結(jié)

    以上是生活随笔為你收集整理的C语言向文件写入内容并读取显示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。