#include"stdio.h"
#include"stdlib.h"
#define N 3
#define M 4
struct student
{
int num;
char name[20];
int score[M];
}stu[N];
int main()
{
int i,j;
FILE fp;
if((fp=fopen("shuju.txt","wb"))==NULL)
{
printf("文錯誤件打開\n");
exit(0);
}printf("請分別輸入%d同學們的學號、姓名、四個課程成績\n",N);
for(i=0;i<N;i++)
{
printf("請輸入第%d個同學信息:",i+1);
scanf("%d%s",&stu[i].num,stu[i].name);
for(j=0;j<M;j++)
scanf("%d",&stu[i].score[j]);
fwrite(&stu[i],sizeof(struct student ),1,fp);
}
printf("%d個同學的信息已經存入磁盤文件中\n",N);
fclose(fp);
if((fp=fopen("shuju.txt","rb"))==NULL)
{
printf("文錯誤件打開\n");
exit(0);
}
printf("***********學生的信息是:*************\n");
for(i=0;i<N;i++)
{
fread(&stu[i],sizeof(struct student ),1,fp);
printf("第%d個同學信息:",i+1);
printf("%d\t%s",stu[i].num,stu[i].name);
for(j=0;j<M;j++)
printf("\t%d",stu[i].score[j]);
printf("\n");
fclose(fp);
}
return 0;
}
運行結果
疑問:
:
第一:為什麼文本(txt)數據是這樣的呢??求解?
第二:能把漢字存進文本文件中去嗎??
文件定義的是FILE fp? 不應該是FILE *fp麼。。。。
另外您是用二進制方式寫的文件,那麼它將以自己的格式處理文件,所以您看不到原來文件的內容。
如果您想看到內容, 要修改
(1) 寫打開fopen用"w"方式,不用"wb"
(2) 把所有fwrite改為fprintf具體寫什麼您得自己定義
例如fprintf(fp,"%s %d", name, score)之類的,具體格式其實和printf到屏幕一樣,只是fprintf是寫到文件裡了
(3) 讀打開也是"r",別用"rb"
(3) 再讀文件的時候也不能用fread了,要用fscanf(fp,"%s%d");之類, 具體讀什麼也和scanf從鍵盤讀一樣。格式和您寫入的相關。
不能一個結構體那麼讀了,只能和您輸入數據那樣按結構體的字段從文件裡直接讀。