这两天一直研究结构数组占内存的问题,同时又发现另一个问题:现在我帖出两段程序请大家分析,一定会有收获的哦!现在我说一下这两个程序:第一个程序是创建一个文件date.txt然后输入学生的学号和分数,然后输出分数大于60的同学。第二个程序是我在计算机中手动建立一个文件叫data.txt,里面包含十个同学的学号和分数,然后利用文件操作去读取,但是输出有一部分是对的,一部分是乱码。我分析是我建立的文本的格式和文件读取操作的格式不匹配,现在请大家分析一下:
(1)#include<stdio.h>
struct student
{
char num[10];
int sco;
} stu_list[10];
main()
{
FILE *fp;
int i,j;
for(i=0;i<=9;i++)
{
printf("please input num: %d\n",i+1);
printf("NO.:");
scanf("%s",stu_list[i].num);
printf("please input sco:\n");
scanf("%d",&stu_list[i].sco);
}
if((fp=fopen("date.txt","w"))==NULL)
{
printf("can not open the file");
exit(0);
}
for(i=0;i<=9;i++)
{
if(fwrite(&stu_list[i],sizeof(struct student),1,fp)!=1)
{
printf("write file error");
}
}
fclose(fp);
fp=fopen("date.txt","r");
for(i=0;i<=9;i++)
{
if((fread(&stu_list[i],sizeof(struct student),1,fp))!=1)
{
printf("read file error");
}
if(stu_list[i].sco>=60)
printf("%s %d\n", stu_list[i].num,stu_list[i].sco);
}
fclose(fp);
}
程序(2)
#include<stdio.h>
struct student
{
char num[10];
int sco;
} stu_list[10];
main()
{
FILE *fp;
int i,j;
fp=fopen("data.txt","r");
for(i=0;i<=9;i++)
{
if(fread(&stu_list[i],sizeof(struct student),1,fp)!=1)
{
printf("read file error");
}
if(stu_list[i].sco>=60)
printf("%s %d\n", stu_list[i].num,stu_list[i].sco);
}
fclose(fp);
}