標(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