C++でfscanf関数・fprintf関数を利用した成績処理のプログ
C++でfscanf関数・fprintf関数を利用した成績処理のプログラムを作成しています。
#include "stdafx.h"
void input(void);
void calc(void);
void edit(void);
int gakusei=10,kamoku=5; /*学生数、科目数*/
char kamokumei[5][40]; /*科目名*/
char shimei[10][40]; /*氏名*/
int tennsuu[10][5]; /*点数*/
float heikin[10]; /*平均点*/
void main() /*メイン関数*/
{
input();
calc ();
edit ();
}
void input(void) /*データ入力(infile.d.txtから読み込む)*/
{
FILE *fp;
int n,k;
fp=fopen("infile.d.txt","r");
if(fp==NULL)
{
printf("infile.d.txtが開けません\n");
}
printf("infile.d.txt\n\n");
fscanf(fp,"%d %d",&gakusei,&kamoku);
printf("%d %d\n",gakusei,kamoku);
fscanf(fp,"%s",kamokumei);
printf("%s\n",kamokumei);
fscanf(fp,"%s",shimei);
printf("%s\n",shimei);
while(fscanf(fp,"%s",tennsuu)!=EOF)
{
printf("%s\n",tennsuu);
}
printf("\n\n");
fclose(fp);
}
void calc(void) /*各学生の平均点を計算、平均点の優秀者(80点以上)及び不合格者(60点未満)を摘出*/
{
int n,k;
float sum;
for(n=0; n<gakusei; n++)
{
sum=0;
for(k=0; k<kamoku; k++)
{
sum+=(float)tennsuu[n][k];
}
heikin[n]=sum/kamoku;
}
}
void edit(void) /*平均点、優秀者及び不合格者の氏名を付加した成績表を出力(outfile.d.txtに書き込み)*/
{
int n;
FILE *seiseki;
seiseki=fopen("outfile.d.txt","w");
printf("outfile.d.txt\n\n");
fprintf(seiseki,"氏名 %s 平均\n",kamokumei);
printf("氏名 %s 平均\n",kamokumei);
fprintf(seiseki,"%s\n",shimei);
printf("%s\n",shimei);
for(n=0; n<gakusei; n++)
{
fprintf(seiseki,"%s",tennsuu);
printf("%s\n",tennsuu);
}
printf("\n");
fprintf(seiseki,"平均点優秀者\n");
printf("平均点優秀者\n");
fprintf(seiseki,"平均点不合格者");
printf("平均点不合格者\n");
fclose(seiseki);
}
添付した画像のoutfile.d.txtのようなフォーマットで出力したいのですが、氏名がうまく出力できません。また、点数もinfile.d.txtの最後の行しか読み込んでくれません。
どのように書き換えればよいのでしょうか?
よろしくお願いします。
*infile.d.txtについて
10 5 ⇒学生数と科目数
材料力学 熱力学 ・・・ ⇒科目名
石川 川上 佐藤 ・・・ ⇒学生の氏名
78 95 75 86 ・・・ ⇒各科目の点数(1行につき5科目×2人分の点数が書き込まれています。)