测试案例:
4
20140101
li ming
m
85 90 92
20140202
zhao li
f
98 78 88
20140013
qiao en
m
92.5 85.6 78.5
20140015
lu yao
m
89.4 86.5 88
ac代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct sa
{
int num;
char name[21],sex;
double score[3];
double avg,sum;
}stu;
int main()
{
FILE *fp;
int n,i,l;
stu *s;
if((fp=fopen("student.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(1);
}
while(~scanf("%d",&n))
{
s=(stu *)malloc(n*sizeof(stu));
for(i=0;i<n;i++)
{
printf("请输入学生学号:\n");
scanf("%d",&s[i].num);
printf("请输入学生姓名:\n");
getchar();//注意gets接收需要吃掉前一位的空格
gets(s[i].name);
printf("请输入学生性别:\n");
scanf(" %c ",&s[i].sex);
scanf("%lf%lf%lf",&s[i].score[0],&s[i].score[1],&s[i].score[2]);
s[i].sum=s[i].score[0]+s[i].score[1]+s[i].score[2];
s[i].avg=s[i].sum/3.0;
fprintf(fp,"%d ",s[i].num);
l=strlen(s[i].name);
fprintf(fp,"%d ",l);
fputs(s[i].name,fp);
fprintf(fp," %c ",s[i].sex);//注意输出格式
fprintf(fp,"%.2lf %.2lf %.2lf %.2lf %.2lf\n",s[i].score[0],s[i].score[1],s[i].score[2],s[i].avg,s[i].sum);
}
}
fclose(fp);
return 0;
}
ps:
- 这题也可以先全部接收再循环一起输出,但是本人比较懒就输入和输出一起处理了,其实像我这么写不用结构体数组也可以。
- 这题记得用ctrl+z终止输入。