//向PC硬盤寫入并讀出兩個學生信息fread(ElemType*,int Size,int n,FILE *)
//fwrite(ElemType*,int Size,int n,FILE *);參數:ElemType*--讀寫緩沖首指針 Size--數據塊的大小
// n--讀寫次數,FILE *--文件對象指針
//本例程包含文件檢測部分內容
#include"stdio.h"
#include"stdlib.h"//用到了exit()
/*
fread():從指定文件讀若干塊數據
*/
struct student
{
char name[10];
int age;
float score;
};
void main()
{
int i;
student s1[2],s2[2],*p1,*p2;//s1和s2是兩個結構體,s1用來存儲鍵盤輸入數據即寫文件,s2用來存儲讀入數據
FILE *fp;
p1=s1;p2=s2;//給指針變量賦值
if((fp=fopen("TEST2.txt","wt+"))==NULL)//“at”表示在fp文件末尾追加數據d:\\TEST.txt
{
printf("打開文件失敗!");
getchar();
exit(1);
}else
{
printf("請輸入學生結構體信息數據:");
printf("\n\r");
for(i=0;i<2;i++)
{
scanf("%s %d %f",p1->name,&p1->age,&p1->score);//鍵盤輸入結構體成員數據 &p1->name
p1++;
}
p1=s1;
// fwrite(p1,sizeof(struct student),2,fp);//向fp文件寫入數據塊2次,每次寫人一個結構體。即一共寫入兩個結構體數據塊
for(i=0;i<2;i++)//注意:這兩種寫入方式都可以
{
fwrite(p1,sizeof(struct student),1,fp);
p1++;
}
// p2=s2;
/*“at”表示在fp文件末尾追加數據, 程序執行到此,文件內部指針已經指向文件末尾
如果要讀入fp文件的數據則必須將文件內部指針重新指向文件第一個字節處,即若要從文件第一個字節開始讀數據
就必須將文件內部指針重新rewind(fp)指向文件頭
*/
rewind(fp);
printf("\n \n");
printf("讀出的數據是:\n");
// fread(p2,sizeof(struct student),2,fp);//向fp文件寫入數據塊2次,每次寫人一個結構體。即一共寫入兩個結構體數據塊
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,表示文件操作沒有出錯
else printf("文件操作出錯\n");
//判斷文件內部指針是否結尾,如果feof(fp)返回值大于1則表示文件內部指針結尾
if(feof(fp)>1)printf("文件指針已結尾\n");
else printf("文件內部指針沒有結尾\n");
char ch=fgetc(fp);//繼續讀出直到文件結尾
while(ch!=EOF)
{
fgetc(fp);
}
if(feof(fp)>1)printf("文件指針已結尾\n");
else printf("文件內部指針沒有結尾\n");
if(fclose(fp)==NULL)
{
printf("文件成功關閉!\n");
}
}

///////////-----GKXW--------------////////////////////////////////////////
|