求教以下C语言程序

来源:百度知道 编辑:UC知道 时间:2024/06/21 18:22:49
自己写了这个程序
#define N 2
#include "stdio.h"
#include "conio.h"
main()
{
struct student
{
char num[6];
char name[8];
float score[3];
float avr;
}stu[N];
int i,j,k,l;
float sum=0;
FILE *fp;
for(i=0;i<N;i++)
{
printf("Input student %d's number:",i+1);
scanf("%d",stu[i].num);
printf("Input student %d's name:",i+1);
scanf("%s",&stu[i].name);
for(j=0;j<3;j++)
{
printf("Input student %d's score %d:",i+1,j+1);
scanf("%f",&stu[i].score[j]);
}
for(k=0;k<3;k++)
{
sum+=stu[i].score[k];
}
stu[i].avr=sum/3;
sum=0;
}
fp=fopen("score.c","w");
for(l=0;l<N;l++)
{
fwrite(&stu[i],sizeof(struct student),1,fp);
if(fwrite(&stu[i],sizeof(struct

问题一:
char num[6];
……
printf("Input student %d's number:",i+1);
scanf("%d",stu[i].num);
我很奇怪为什么要把num定义为字符数组但又以数字的方式接受键盘输入。如果是NUMBER的话你还是定义成INT吧。或者把%d改成%s。

问题二:
for(l=0;l<N;l++)
{
fwrite(&stu[i],sizeof(struct student),1,fp);
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
定义的循环变量是L,怎么到里面就是I了呢= =

问题三:
写入的数据用记事本打开发现是乱码是正常的。只要能在程序里用fread函数正确的读取出来就可以了。你可以在程序的最后面——fclose(fp)这句之后——加上如下的代码:
fp=fopen("score.c","r");
for(i=0;i<N;i++)
{
fread(&stu[i],sizeof(struct student),1,fp);
printf("%s",stu[i].num);
printf("\n");
printf("%s",stu[i].name);
printf("\n");
for(j=0;j<3;j++) printf("%f ",stu[i].score[j]);
printf("\n%f\n",stu[i].avr);
}
fclose(fp);