第一次来发帖,大家帮忙看下程序吧

时间:2022-09-18 14:12:11
我们那个文件老师坑爹的只讲了半节课,自己编从头错到尾,悲催啊!
哪位大神帮我看下

题目 修改实验三中的实验题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


引用 5 楼 oOverdrive 的回复:
谢谢了,问下是不是错了一个分号,和加一个fopen其余没错的了吧

是的 我就只改了这两处

#7


我有运行了下,ID与Name要声明成数组,但是为什么写不进stud文件里啊,当然我不怎么会用文件,你能把你的运行结果截张图吗?而且要进行第二次的输入要打次回车,但那样格式就不对了

#8


引用 楼主 oOverdrive 的回复:
我们那个文件老师坑爹的只讲了半节课,自己编从头错到尾,悲催啊!
哪位大神帮我看下

题目 修改实验三中的实验题4,有十个学生、四门课程,用结构体定义学生的信息,实现:
将原有数据和计算出的平均分数存放在磁盘文件stud中。
   文件的格式如下:
        学号     姓名        数学   外语    体育  C语言  平均
100103   ZhangSan    ……

编译报错是最好调的,很多新人都觉得难调,就是不肯仔细去读读报错信息。

#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


引用 5 楼 oOverdrive 的回复:
谢谢了,问下是不是错了一个分号,和加一个fopen其余没错的了吧

是的 我就只改了这两处

#7


我有运行了下,ID与Name要声明成数组,但是为什么写不进stud文件里啊,当然我不怎么会用文件,你能把你的运行结果截张图吗?而且要进行第二次的输入要打次回车,但那样格式就不对了

#8


引用 楼主 oOverdrive 的回复:
我们那个文件老师坑爹的只讲了半节课,自己编从头错到尾,悲催啊!
哪位大神帮我看下

题目 修改实验三中的实验题4,有十个学生、四门课程,用结构体定义学生的信息,实现:
将原有数据和计算出的平均分数存放在磁盘文件stud中。
   文件的格式如下:
        学号     姓名        数学   外语    体育  C语言  平均
100103   ZhangSan    ……

编译报错是最好调的,很多新人都觉得难调,就是不肯仔细去读读报错信息。

#9


但它是因为上面错的,下面报错,这也不好调吧