哪位大神帮我看下
题目 修改实验三中的实验题4,有十个学生、四门课程,用结构体定义学生的信息,实现:
将原有数据和计算出的平均分数存放在磁盘文件stud中。
文件的格式如下:
学号 姓名 数学 外语 体育 C语言 平均
100103 ZhangSan 70 80 93 78 81
100101 Lisi 63 74 82 90 73
…. …. …. …. …. ….
在向文件stud写入数据后,应检查验证stud文件中的内容是否正确。
代码
#include<stdlib.h>
#include<stdio.h>
#define n 10;
struct student{
char ID;
char Name;
float sub[4];
float avg;
};
int main()
{
int i,j;
struct student stu[n];
FILE *fp;
float sum=0;
if((fp=("stud.txt","w"))==NULL)
{
printf("Can't open");
exit(1);
}
fprintf(fp, "%-10s%-15s%-10s%-10s%-10s%-10s%-10s\n",
"学号", "姓名", "数学", "外语", "体育", "C语言", "平均");
for(i=0;i<n;i++)
{
fscanf(stdin,"%s%s",stu[i].ID,stu[i].Name);
fprintf(fp,"%s\t%s",stu[i].ID,stu[i].Name);
for(j=0;j<4;j++)
{
fscanf(stdin,"%f",&stu[i].sub[j]);
fprintf(fp,"%f\t",stu[i].sub[j]);
sum+=stu[i].sub[j];
}
stu[i].avg=sum/4;
sum=0;
fprintf(stdout,"%f\n",stu[i].avg);
fprintf(fp,"%f\n",stu[i].avg);
}
fclose(fp);
return 0;
}
9 个解决方案
#1
目前只是小菜,还希望有哪位大神讲下学习方法,学了半年了,也没觉得学到多少
#2
#include<stdlib.h>
#include<stdio.h>
#define n 10
struct student
{
char ID;
char Name;
float sub[4];
float avg;
};
int main()
{
int i,j;
struct student stu[n];
FILE *fp;
float sum=0;
if((fp=fopen("stud.txt","w"))==NULL)
{
printf("Can't open");
exit(1);
}
fprintf(fp, "%-10s%-15s%-10s%-10s%-10s%-10s%-10s\n",
"学号", "姓名", "数学", "外语", "体育", "C语言", "平均");
for(i=0;i<n;i++)
{
fscanf(stdin,"%s%s",stu[i].ID,stu[i].Name);
fprintf(fp,"%s\t%s",stu[i].ID,stu[i].Name);
for(j=0;j<4;j++)
{
fscanf(stdin,"%f",&stu[i].sub[j]);
fprintf(fp,"%f\t",stu[i].sub[j]);
sum+=stu[i].sub[j];
}
stu[i].avg=sum/4;
sum=0;
fprintf(stdout,"%f\n",stu[i].avg);
fprintf(fp,"%f\n",stu[i].avg);
}
fclose(fp);
return 0;
}
#3
忽然间发现了个重要问题,好像多了个分号
#4
这么快就有人回复了,呵呵,CSDN论坛的人真热心
#5
谢谢了,问下是不是错了一个分号,和加一个fopen其余没错的了吧
#6
是的 我就只改了这两处
#7
我有运行了下,ID与Name要声明成数组,但是为什么写不进stud文件里啊,当然我不怎么会用文件,你能把你的运行结果截张图吗?而且要进行第二次的输入要打次回车,但那样格式就不对了
#8
编译报错是最好调的,很多新人都觉得难调,就是不肯仔细去读读报错信息。
#9
但它是因为上面错的,下面报错,这也不好调吧
#1
目前只是小菜,还希望有哪位大神讲下学习方法,学了半年了,也没觉得学到多少
#2
#include<stdlib.h>
#include<stdio.h>
#define n 10
struct student
{
char ID;
char Name;
float sub[4];
float avg;
};
int main()
{
int i,j;
struct student stu[n];
FILE *fp;
float sum=0;
if((fp=fopen("stud.txt","w"))==NULL)
{
printf("Can't open");
exit(1);
}
fprintf(fp, "%-10s%-15s%-10s%-10s%-10s%-10s%-10s\n",
"学号", "姓名", "数学", "外语", "体育", "C语言", "平均");
for(i=0;i<n;i++)
{
fscanf(stdin,"%s%s",stu[i].ID,stu[i].Name);
fprintf(fp,"%s\t%s",stu[i].ID,stu[i].Name);
for(j=0;j<4;j++)
{
fscanf(stdin,"%f",&stu[i].sub[j]);
fprintf(fp,"%f\t",stu[i].sub[j]);
sum+=stu[i].sub[j];
}
stu[i].avg=sum/4;
sum=0;
fprintf(stdout,"%f\n",stu[i].avg);
fprintf(fp,"%f\n",stu[i].avg);
}
fclose(fp);
return 0;
}
#3
忽然间发现了个重要问题,好像多了个分号
#4
这么快就有人回复了,呵呵,CSDN论坛的人真热心
#5
谢谢了,问下是不是错了一个分号,和加一个fopen其余没错的了吧
#6
是的 我就只改了这两处
#7
我有运行了下,ID与Name要声明成数组,但是为什么写不进stud文件里啊,当然我不怎么会用文件,你能把你的运行结果截张图吗?而且要进行第二次的输入要打次回车,但那样格式就不对了
#8
编译报错是最好调的,很多新人都觉得难调,就是不肯仔细去读读报错信息。
#9
但它是因为上面错的,下面报错,这也不好调吧