c++,输入5个学生的信息学号(6位整数)、姓名(6个字符)、3门课的成绩(3位整数1位小数)。计算每个学

原问题:c++,输入5个学生的信息学号(6位整数)、姓名(6个字符)、3门课的成绩(3位整数1位小数)。计算每个学
分类:编程开发 > 最后更新时间:【2017-01-06 23:16:24】
问题补充:

输入5个学生的信息:学号(6位整数)、姓名(6个字符)、3门课的成绩(3位整数1位小数)。计算每个学生的平均成绩(3位整数2位小数),将所有数据写入文件STU1.DAT;

请问下面这个程序哪里不对??

#include<stdio.h>

struct student

{

int id;

char name[6];

float score[3];

float ave;

};

void main()

{

FILE *p;

struct student stu[5];

int i;

float sum;

p=fopen("STU1.DAT","w");

for(i=0;i<5;i++)

{

fprintf(p,"input id:\n");

fscanf(p,"%d",&stu[i].id);

fprintf(p,"input name:\n");

fscanf(p,"%s",stu[i].name);

fprintf(p,"input score:\n");

fscanf(p,"%f%f%f",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);

sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];

stu[i].ave = sum / 3;

fprintf(p,"ave=%3.2f\n",stu[i].ave);

}

fclose(p);

}

最佳答案

程序有多个问题,从基础的定义上,name要6个字符的话,必须定义char name[7];

最大的错是你的文件用只写打开的,你却用fscanf来读文件

另外 .,类似于input id:应该是提示,你却将它写入了文件

题目要求的是将数据写入文件,输入还是要用控制台的


追问:
那应该怎么改啊? 追答:
定义的我已帮你改了输入/输出改普通的scanf及printf就可以了最后才是输出到文件你既然都写了这个多程序,稍改下就可以了
追问:
最后应该怎么写啊,真的不会,谢谢。。。[心塞]。。。
  • 追答:
    循环中改 printf("input id:\n"); scanf("%d", &stu[i].id); printf("input name:\n"); scanf("%s", stu[i].name); printf("input score:\n"); scanf("%f%f%f", &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]); sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2]; stu[i].ave = sum / 3; fprintf(p, "ave=%3.2f\n", stu[i].ave);另外,注意你的输入/输出要求(你的程序可以不用结构数组的)
    最佳答案由网友  whoami1978  提供
  • 公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
    17

    分享到:

    其他回答

    暂无其它回答!

      推荐