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

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

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

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

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

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

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

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

對參數(shù)的說明:

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

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

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

fp:表示文件指針。

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

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

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

對于 fwrite() 來說,肯定發(fā)生了寫入錯誤,可以用 ferror() 函數(shù)檢測。

對于 fread() 來說,可能讀到了文件末尾,可能發(fā)生了錯誤,可以用 ferror() 或 feof() 檢測。

【示例】從鍵盤輸入一個數(shù)組,將數(shù)組寫入文件再讀取出來。

#include<stdio.h>
#define N 5
int main(){
  //從鍵盤輸入的數(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);
  }
 
  //從鍵盤輸入數(shù)據(jù) 并保存到數(shù)組a
  for(i=0; i<N; i++){
    scanf("%d", &a[i]);
  }
  //將數(shù)組a的內(nèi)容寫入到文件
  fwrite(a, size, N, fp);
  //將文件中的位置指針重新定位到文件開頭
  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)制方式打開文件。請閱讀《C語言中文本文件與二進(jìn)制文件的區(qū)別》了解更多。

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

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

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

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

#include<stdio.h>
#define N 2
struct stu{
  char name[10]; //姓名
  int num; //學(xué)號
  int age; //年齡
  float score; //成績
}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);
  }
  //從鍵盤輸入數(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ù)寫入文件
  fwrite(boya, sizeof(struct stu), N, fp);
  //將文件指針重置到文件開頭
  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

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

相關(guān)文章

  • C++中點(diǎn)操作符和箭頭操作符的使用詳解

    C++中點(diǎn)操作符和箭頭操作符的使用詳解

    本篇文章介紹了,C++中點(diǎn)操作符和箭頭操作符的使用詳解。需要的朋友參考下
    2013-05-05
  • C語言實(shí)現(xiàn)輸出鏈表中倒數(shù)第k個節(jié)點(diǎn)

    C語言實(shí)現(xiàn)輸出鏈表中倒數(shù)第k個節(jié)點(diǎn)

    這篇文章主要介紹了C語言實(shí)現(xiàn)輸出鏈表中倒數(shù)第k個節(jié)點(diǎn),主要涉及鏈表的遍歷操作,是數(shù)據(jù)結(jié)構(gòu)中鏈表的常見操作。需要的朋友可以參考下
    2014-09-09
  • 用C實(shí)現(xiàn)添加和讀取配置文件函數(shù)

    用C實(shí)現(xiàn)添加和讀取配置文件函數(shù)

    本篇文章是對用C語言實(shí)現(xiàn)添加和讀取配置文件函數(shù)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 一文詳解如何實(shí)現(xiàn)QT的多語言切換(靜態(tài)+動態(tài))

    一文詳解如何實(shí)現(xiàn)QT的多語言切換(靜態(tài)+動態(tài))

    這篇文章主要給大家介紹了關(guān)于如何實(shí)現(xiàn)QT的多語言切換(靜態(tài)+動態(tài))的相關(guān)資料,Qt是一款跨平臺的C++應(yīng)用程序開發(fā)框架,提供了一套豐富的工具和類庫來簡化應(yīng)用程序開發(fā),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • OpenCV使用GrabCut實(shí)現(xiàn)摳圖功能

    OpenCV使用GrabCut實(shí)現(xiàn)摳圖功能

    Grabcut是基于圖割(graph cut)實(shí)現(xiàn)的圖像分割算法,它需要用戶輸入一個bounding box作為分割目標(biāo)位置,實(shí)現(xiàn)對目標(biāo)與背景的分離/分割。本文將使用GrabCut實(shí)現(xiàn)摳圖功能,需要的可以參考一下
    2023-02-02
  • C++實(shí)現(xiàn)多源最短路徑之Floyd算法示例

    C++實(shí)現(xiàn)多源最短路徑之Floyd算法示例

    這篇文章主要介紹了C++實(shí)現(xiàn)多源最短路徑之Floyd算法,結(jié)合實(shí)例形式分析了多源最短路徑之Floyd算法的原理、實(shí)現(xiàn)方法及核心代碼,需要的朋友可以參考下
    2017-08-08
  • C++入門語法之函數(shù)重載詳解

    C++入門語法之函數(shù)重載詳解

    這篇文章主要為大家詳細(xì)介紹了C++入門語法之函數(shù)重載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C語言?for循環(huán)示例詳解

    C語言?for循環(huán)示例詳解

    本文將詳細(xì)介紹for循環(huán)的用法并提供相關(guān)的可編譯運(yùn)行的C代碼示例,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2023-06-06
  • C語言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)鏈表逆序并輸出

    C語言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)鏈表逆序并輸出

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)鏈表逆序并輸出的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C++實(shí)現(xiàn)哈夫曼樹的方法

    C++實(shí)現(xiàn)哈夫曼樹的方法

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)哈夫曼樹的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論

苗栗县| 临潭县| 拉孜县| 车险| 石台县| 灵宝市| 汉川市| 讷河市| 长泰县| 新巴尔虎左旗| 富蕴县| 琼中| 洛扎县| 芒康县| 巨野县| 德庆县| 巫溪县| 长宁县| 中方县| 永康市| 安多县| 岳阳县| 故城县| 美姑县| 宜兴市| 临高县| 颍上县| 比如县| 绍兴县| 蓝田县| 株洲市| 伊通| 滕州市| 麦盖提县| 保康县| 中卫市| 六枝特区| 红原县| 达孜县| 荃湾区| 台前县|