標(biāo)題: 文件操作之-數(shù)據(jù)塊讀寫(xiě)fread(),fwrite()-C語(yǔ)言教程 [打印本頁(yè)]

作者: 51黑ren    時(shí)間: 2015-12-20 03:06
標(biāo)題: 文件操作之-數(shù)據(jù)塊讀寫(xiě)fread(),fwrite()-C語(yǔ)言教程
//向PC硬盤(pán)寫(xiě)入并讀出兩個(gè)學(xué)生信息fread(ElemType*,int Size,int n,FILE *)

//fwrite(ElemType*,int Size,int n,FILE *);參數(shù):ElemType*--讀寫(xiě)緩沖首指針   Size--數(shù)據(jù)塊的大小
//  n--讀寫(xiě)次數(shù),FILE *--文件對(duì)象指針
//本例程包含文件檢測(cè)部分內(nèi)容

#include"stdio.h"
#include"stdlib.h"//用到了exit()
/*
fread():從指定文件讀若干塊數(shù)據(jù)

*/
struct  student
{
  char name[10];
  int age;
  float score;
};

void main()
{

  int i;
  student s1[2],s2[2],*p1,*p2;//s1和s2是兩個(gè)結(jié)構(gòu)體,s1用來(lái)存儲(chǔ)鍵盤(pán)輸入數(shù)據(jù)即寫(xiě)文件,s2用來(lái)存儲(chǔ)讀入數(shù)據(jù)
  FILE *fp;
  p1=s1;p2=s2;//給指針變量賦值
  if((fp=fopen("TEST2.txt","wt+"))==NULL)//“at”表示在fp文件末尾追加數(shù)據(jù)d:\\TEST.txt
  {
    printf("打開(kāi)文件失。");
        getchar();
        exit(1);

  }else
  {

         printf("請(qǐng)輸入學(xué)生結(jié)構(gòu)體信息數(shù)據(jù):");
     printf("\n\r");

     for(i=0;i<2;i++)
         {
            scanf("%s %d %f",p1->name,&p1->age,&p1->score);//鍵盤(pán)輸入結(jié)構(gòu)體成員數(shù)據(jù) &p1->name
                p1++;
         
         }
      p1=s1;
  //   fwrite(p1,sizeof(struct student),2,fp);//向fp文件寫(xiě)入數(shù)據(jù)塊2次,每次寫(xiě)人一個(gè)結(jié)構(gòu)體。即一共寫(xiě)入兩個(gè)結(jié)構(gòu)體數(shù)據(jù)塊
         for(i=0;i<2;i++)//注意:這兩種寫(xiě)入方式都可以
         {
             fwrite(p1,sizeof(struct student),1,fp);
             p1++;
         }

         //         p2=s2;
         /*“at”表示在fp文件末尾追加數(shù)據(jù), 程序執(zhí)行到此,文件內(nèi)部指針已經(jīng)指向文件末尾
           如果要讀入fp文件的數(shù)據(jù)則必須將文件內(nèi)部指針重新指向文件第一個(gè)字節(jié)處,即若要從文件第一個(gè)字節(jié)開(kāi)始讀數(shù)據(jù)
           就必須將文件內(nèi)部指針重新rewind(fp)指向文件頭
         
         */
         rewind(fp);


   printf("\n  \n");
   printf("讀出的數(shù)據(jù)是:\n");
  // fread(p2,sizeof(struct student),2,fp);//向fp文件寫(xiě)入數(shù)據(jù)塊2次,每次寫(xiě)人一個(gè)結(jié)構(gòu)體。即一共寫(xiě)入兩個(gè)結(jié)構(gòu)體數(shù)據(jù)塊
   for(i=0;i<2;i++)
         {
            fread(p2,sizeof(struct student),1,fp);
           printf("%s\n %d\n %f\n",p2->name,p2->age,p2->score);//分行顯示
           p2++;
         }

  }
if(0==ferror(fp))printf("文件操作成功\n");//如果ferror(fp)返回值是0,表示文件操作沒(méi)有出錯(cuò)
else printf("文件操作出錯(cuò)\n");
//判斷文件內(nèi)部指針是否結(jié)尾,如果feof(fp)返回值大于1則表示文件內(nèi)部指針結(jié)尾
if(feof(fp)>1)printf("文件指針已結(jié)尾\n");
else printf("文件內(nèi)部指針沒(méi)有結(jié)尾\n");
char ch=fgetc(fp);//繼續(xù)讀出直到文件結(jié)尾
while(ch!=EOF)
{
   fgetc(fp);

}
if(feof(fp)>1)printf("文件指針已結(jié)尾\n");
else printf("文件內(nèi)部指針沒(méi)有結(jié)尾\n");
if(fclose(fp)==NULL)
  {
    printf("文件成功關(guān)閉!\n");

  }

}


///////////-----GKXW--------------////////////////////////////////////////











歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1