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

C語言以數據塊的形式讀寫文件實例代碼

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

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

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

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

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

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

對參數的說明:

ptr 為內存區(qū)塊的指針,它可以是數組、變量、結構體等。fread() 中的 ptr 用來存放讀取到的數據,fwrite() 中的 ptr 用來存放要寫入的數據。

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

count:表示要讀寫的數據塊的塊數。

fp:表示文件指針。

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

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

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

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

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

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

#include<stdio.h>
#define N 5
int main(){
  //從鍵盤輸入的數據放入a,從文件讀取的數據放入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);
  }
 
  //從鍵盤輸入數據 并保存到數組a
  for(i=0; i<N; i++){
    scanf("%d", &a[i]);
  }
  //將數組a的內容寫入到文件
  fwrite(a, size, N, fp);
  //將文件中的位置指針重新定位到文件開頭
  rewind(fp);
  //從文件讀取內容并保存到數組b
  fread(b, size, N, fp);
  //在屏幕上顯示數組b的內容
  for(i=0; i<N; i++){
    printf("%d ", b[i]);
  }
  printf("\n");
  fclose(fp);
  return 0;
}

運行結果:

23 409 500 100 222↙

23 409 500 100 222

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

打開 D:\\demo.txt,發(fā)現文件內容根本無法閱讀。這是因為我們使用"rb+"方式打開文件,數據以二進制形式寫入文件,一般無法閱讀。

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

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

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

#include<stdio.h>
#define N 2
struct stu{
  char name[10]; //姓名
  int num; //學號
  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);
  }
  //從鍵盤輸入數據
  printf("Input data:\n");
  for(i=0; i<N; i++,pa++){
    scanf("%s %d %d %f",pa->name, &pa->num,&pa->age, &pa->score);
  }
  //將數組 boya 的數據寫入文件
  fwrite(boya, sizeof(struct stu), N, fp);
  //將文件指針重置到文件開頭
  rewind(fp);
  //從文件讀取數據并保存到數據 boyb
  fread(boyb, sizeof(struct stu), N, fp);
  //輸出數組 boyb 中的數據
  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;
}

運行結果:

Input data:

Tom 2 15 90.5↙

Hua 1 14 99↙

Tom  2  15  90.500000

Hua  1  14  99.000000

以上就是對C語言以數據塊形式讀取的實例代碼,希望能幫助學習這部分內容的同學。

相關文章

  • C++中點操作符和箭頭操作符的使用詳解

    C++中點操作符和箭頭操作符的使用詳解

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

    C語言實現輸出鏈表中倒數第k個節(jié)點

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

    用C實現添加和讀取配置文件函數

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

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

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

    OpenCV使用GrabCut實現摳圖功能

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

    C++實現多源最短路徑之Floyd算法示例

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

    C++入門語法之函數重載詳解

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

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

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

    C語言數據結構實現鏈表逆序并輸出

    這篇文章主要介紹了C語言數據結構實現鏈表逆序并輸出的相關資料,需要的朋友可以參考下
    2017-04-04
  • C++實現哈夫曼樹的方法

    C++實現哈夫曼樹的方法

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

最新評論

乌苏市| 天长市| 福鼎市| 海城市| 龙里县| 江安县| 天等县| 枞阳县| 阳西县| 武隆县| 海门市| 长沙市| 临西县| 鹤山市| 达拉特旗| 东港市| 特克斯县| 凭祥市| 疏附县| 获嘉县| 云林县| 徐州市| 柏乡县| 望谟县| 兰西县| 兰考县| 峡江县| 古交市| 交城县| 闸北区| 额济纳旗| 叙永县| 沧州市| 绥棱县| 弥渡县| 延川县| 虹口区| 治多县| 禹城市| 江津市| 泗阳县|