欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言以數(shù)據(jù)塊的形式讀寫(xiě)文件實(shí)例代碼

 更新時(shí)間:2016年07月16日 12:08:02   投稿:lqh  
本文主要介紹C語(yǔ)言中以數(shù)據(jù)塊的形式讀寫(xiě)文件,這里提供了實(shí)例代碼舉例說(shuō)明,有需要的小伙伴可以參考下

fgets() 有局限性,每次最多只能從文件中讀取一行內(nèi)容,因?yàn)?fgets 遇到換行符就結(jié)束讀取。如果希望讀取多行內(nèi)容,需要使用 fread 函數(shù);相應(yīng)地寫(xiě)入函數(shù)為 fwrite。

fread() 函數(shù)用來(lái)從指定文件中讀取塊數(shù)據(jù)。所謂塊數(shù)據(jù),也就是若干個(gè)字節(jié)的數(shù)據(jù),可以是一個(gè)字符,可以是一個(gè)字符串,可以是多行數(shù)據(jù),并沒(méi)有什么限制。fread() 的原型為:

size_t fread ( void *ptr, size_t size, size_t count, FILE *fp );

fwrite() 函數(shù)用來(lái)向文件中寫(xiě)入塊數(shù)據(jù),它的原型為:

size_t fwrite ( void * ptr, size_t size, size_t count, FILE *fp );

對(duì)參數(shù)的說(shuō)明:

ptr 為內(nèi)存區(qū)塊的指針,它可以是數(shù)組、變量、結(jié)構(gòu)體等。fread() 中的 ptr 用來(lái)存放讀取到的數(shù)據(jù),fwrite() 中的 ptr 用來(lái)存放要寫(xiě)入的數(shù)據(jù)。

size:表示每個(gè)數(shù)據(jù)塊的字節(jié)數(shù)。

count:表示要讀寫(xiě)的數(shù)據(jù)塊的塊數(shù)。

fp:表示文件指針。

理論上,每次讀寫(xiě) size*count 個(gè)字節(jié)的數(shù)據(jù)。

size_t 是在 stddef.h 頭文件中使用 typedef 定義的數(shù)據(jù)類(lèi)型,表示無(wú)符號(hào)整數(shù),也即非負(fù)數(shù),常用來(lái)表示數(shù)量。

返回值:返回成功讀寫(xiě)的塊數(shù),也即 count。如果返回值小于 count:

對(duì)于 fwrite() 來(lái)說(shuō),肯定發(fā)生了寫(xiě)入錯(cuò)誤,可以用 ferror() 函數(shù)檢測(cè)。

對(duì)于 fread() 來(lái)說(shuō),可能讀到了文件末尾,可能發(fā)生了錯(cuò)誤,可以用 ferror() 或 feof() 檢測(cè)。

【示例】從鍵盤(pán)輸入一個(gè)數(shù)組,將數(shù)組寫(xiě)入文件再讀取出來(lái)。

#include<stdio.h>
#define N 5
int main(){
  //從鍵盤(pán)輸入的數(shù)據(jù)放入a,從文件讀取的數(shù)據(jù)放入b
  int a[N], b[N];
  int i, size = sizeof(int);
  FILE *fp;
  if( (fp=fopen("D:\\demo.txt", "rb+")) == NULL ){
    printf("Cannot open file, press any key to exit!\n");
    getch();
    exit(1);
  }
 
  //從鍵盤(pán)輸入數(shù)據(jù) 并保存到數(shù)組a
  for(i=0; i<N; i++){
    scanf("%d", &a[i]);
  }
  //將數(shù)組a的內(nèi)容寫(xiě)入到文件
  fwrite(a, size, N, fp);
  //將文件中的位置指針重新定位到文件開(kāi)頭
  rewind(fp);
  //從文件讀取內(nèi)容并保存到數(shù)組b
  fread(b, size, N, fp);
  //在屏幕上顯示數(shù)組b的內(nèi)容
  for(i=0; i<N; i++){
    printf("%d ", b[i]);
  }
  printf("\n");
  fclose(fp);
  return 0;
}

運(yùn)行結(jié)果:

23 409 500 100 222↙

23 409 500 100 222

fwrite()/fread() 函數(shù)直接操作字節(jié),建議使用二進(jìn)制方式打開(kāi)文件。請(qǐng)閱讀《C語(yǔ)言中文本文件與二進(jìn)制文件的區(qū)別》了解更多。

打開(kāi) D:\\demo.txt,發(fā)現(xiàn)文件內(nèi)容根本無(wú)法閱讀。這是因?yàn)槲覀兪褂?rb+"方式打開(kāi)文件,數(shù)據(jù)以二進(jìn)制形式寫(xiě)入文件,一般無(wú)法閱讀。

數(shù)據(jù)寫(xiě)入完畢后,位置指針在文件的末尾,要想讀取數(shù)據(jù),必須將文件指針移動(dòng)到文件開(kāi)頭,這就是rewind(fp);的作用。更多關(guān)于rewind函數(shù)的內(nèi)容請(qǐng)點(diǎn)擊:C語(yǔ)言rewind函數(shù)。

文件的后綴不一定是 .txt,它可以是任意的,你可以自己命名,例如 demo.ddd、demo.doc、demo.diy 等。

【示例】從鍵盤(pán)輸入兩個(gè)學(xué)生數(shù)據(jù),寫(xiě)入一個(gè)文件中,再讀出這兩個(gè)學(xué)生的數(shù)據(jù)顯示在屏幕上。

#include<stdio.h>
#define N 2
struct stu{
  char name[10]; //姓名
  int num; //學(xué)號(hào)
  int age; //年齡
  float score; //成績(jī)
}boya[N], boyb[N], *pa, *pb;
int main(){
  FILE *fp;
  int i;
  pa = boya;
  pb = boyb;
  if( (fp=fopen("d:\\demo.txt", "wb+")) == NULL ){
    printf("Cannot open file, press any key to exit!\n");
    getch();
    exit(1);
  }
  //從鍵盤(pán)輸入數(shù)據(jù)
  printf("Input data:\n");
  for(i=0; i<N; i++,pa++){
    scanf("%s %d %d %f",pa->name, &pa->num,&pa->age, &pa->score);
  }
  //將數(shù)組 boya 的數(shù)據(jù)寫(xiě)入文件
  fwrite(boya, sizeof(struct stu), N, fp);
  //將文件指針重置到文件開(kāi)頭
  rewind(fp);
  //從文件讀取數(shù)據(jù)并保存到數(shù)據(jù) boyb
  fread(boyb, sizeof(struct stu), N, fp);
  //輸出數(shù)組 boyb 中的數(shù)據(jù)
  for(i=0; i<N; i++,pb++){
    printf("%s %d %d %f\n", pb->name, pb->num, pb->age, pb->score);
  }
  fclose(fp);
  return 0;
}

運(yùn)行結(jié)果:

Input data:

Tom 2 15 90.5↙

Hua 1 14 99↙

Tom  2  15  90.500000

Hua  1  14  99.000000

以上就是對(duì)C語(yǔ)言以數(shù)據(jù)塊形式讀取的實(shí)例代碼,希望能幫助學(xué)習(xí)這部分內(nèi)容的同學(xué)。

相關(guān)文章

  • C語(yǔ)言線程對(duì)象和線程存儲(chǔ)的實(shí)現(xiàn)

    C語(yǔ)言線程對(duì)象和線程存儲(chǔ)的實(shí)現(xiàn)

    這篇文章主要介紹了C語(yǔ)言線程對(duì)象和線程存儲(chǔ)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C++實(shí)現(xiàn)數(shù)字雨效果

    C++實(shí)現(xiàn)數(shù)字雨效果

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)數(shù)字雨效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 老生常談C語(yǔ)言動(dòng)態(tài)函數(shù)庫(kù)的制作和使用(推薦)

    老生常談C語(yǔ)言動(dòng)態(tài)函數(shù)庫(kù)的制作和使用(推薦)

    下面小編就為大家?guī)?lái)一篇老生常談C語(yǔ)言動(dòng)態(tài)函數(shù)庫(kù)的制作和使用(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • C語(yǔ)言打印楊輝三角形的示例代碼

    C語(yǔ)言打印楊輝三角形的示例代碼

    楊輝三角形,又稱(chēng)帕斯卡三角形、賈憲三角形、海亞姆三角形,它的排列形如三角形。本文將為大家介紹通過(guò)C語(yǔ)言實(shí)現(xiàn)打印楊輝三角形的示例代碼,需要的可以參考一下
    2022-02-02
  • C語(yǔ)言實(shí)現(xiàn)memcpy函數(shù)的使用示例

    C語(yǔ)言實(shí)現(xiàn)memcpy函數(shù)的使用示例

    在C語(yǔ)言中,我們可以自己實(shí)現(xiàn) memcpy 函數(shù)來(lái)實(shí)現(xiàn)內(nèi)存數(shù)據(jù)的拷貝操作,本文就來(lái)介紹一下C語(yǔ)言實(shí)現(xiàn)memcpy函數(shù)的使用示例,感興趣的可以了解一下
    2023-09-09
  • C語(yǔ)言數(shù)據(jù)的存儲(chǔ)超詳細(xì)講解中篇練習(xí)

    C語(yǔ)言數(shù)據(jù)的存儲(chǔ)超詳細(xì)講解中篇練習(xí)

    使用編程語(yǔ)言進(jìn)行編程時(shí),需要用到各種變量來(lái)存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類(lèi)型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類(lèi)型,來(lái)分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么
    2022-04-04
  • C++控制權(quán)限關(guān)鍵字protected

    C++控制權(quán)限關(guān)鍵字protected

    這篇文章主要介紹了C++控制權(quán)限關(guān)鍵字protected,protected和private類(lèi)似,而對(duì)于派生類(lèi)來(lái)說(shuō),protected與public類(lèi)似,下面來(lái)一起倆姐更多詳細(xì)內(nèi)容吧,需要的小伙伴可以參考一下
    2022-01-01
  • C語(yǔ)言實(shí)現(xiàn)俄羅斯方塊小游戲

    C語(yǔ)言實(shí)現(xiàn)俄羅斯方塊小游戲

    這篇文章主要為大家詳細(xì)介紹了Linux下C語(yǔ)言實(shí)現(xiàn)俄羅斯方塊小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 詳解C語(yǔ)言之實(shí)現(xiàn)通訊錄

    詳解C語(yǔ)言之實(shí)現(xiàn)通訊錄

    這篇文章主要為大家詳細(xì)介紹了用C語(yǔ)言實(shí)現(xiàn)通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++中malloc與free、new與delete的詳解與應(yīng)用

    C++中malloc與free、new與delete的詳解與應(yīng)用

    今天小編就為大家分享一篇關(guān)于C++中malloc與free、new與delete的詳解與應(yīng)用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12

最新評(píng)論