#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student{
char name[10];
char num[11];
char sex[3];
int grade[6];
int total;
}s[50];
char claname[15];
int main()
{
FILE *fp;
int n,i,j;
char ch;
printf("请输入班级名称:");
scanf("%s",claname);
strcat(claname, ".txt"); //为班级软件191创建一个txt文件
fp=fopen(claname,"w+");
if (fp == NULL)
{
printf("File open error!\n");
exit(0);
}
printf("请输入学生数 \n");
scanf("%d",&n);
printf("请按以下格式并使用空格输入学生信息:\n姓 名 学 号 性别 大英 高数 C程 导论 体育 近代史\n");
for(i=0;i<n;i++)
{
scanf("%s",s[i].name);
scanf("%s",s[i].num);
scanf("%s",s[i].sex);
scanf("%d",&s[i].grade[0]);
scanf("%d",&s[i].grade[1]);
scanf("%d",&s[i].grade[2]);
scanf("%d",&s[i].grade[3]);
scanf("%d",&s[i].grade[4]);
scanf("%d",&s[i].grade[5]);
fwrite(&s[i],sizeof(struct student),1,fp); //将学生信息从内存变量写入文件
fputc('\n',fp); //用换行符分割学生信息,每个学生信息占一行
}
fclose(fp);
fp=fopen("软件191.txt","r");
if (fp == NULL)
{
printf("File open error!\n");
exit(0);
}
printf("学 号 姓 名 性别 总成绩 \n");
for (i=0;i<n;i++) //从软件191.txt文件中读学生信息
{
fread(&s[i],sizeof(struct student),1,fp);
ch=fgetc(fp);
s[i].total=0;
for(j=0;j<6;j++)
s[i].total+=s[i].grade[j];
printf("%s %s %s %d\n", s[i].num, s[i].name, s[i].sex,s[i].total);
}
fclose(fp);
return 0;
}
fseek到末尾,ftell获取文件大小,大小除以结构体的大小sizeof(struct student)就得到数量。
fseek(fp,0,SEEK_END);int size = ftell(fp); int num = size / sizeof(struct student);