C
C言語で
各学生の学籍番号・物理の点数・化学の点数の組がスペース区切りで一行に記述されたファイルを読み込み,全学生の物理の平均点・最高点・最低点,および化学の平均点・最高点・最低点を別のファイルに書き出すプログラムで、入力するファイル名および出力するファイル名を指定できるようにすること。
また、学籍番号・物理の点数・化学の点数の 3 つのメンバを持つ構造体 struct student_data を宣言し,さらに typedef 宣言を用いて struct student_data 型を student として参照できるようにせよ.
そして、student型の配列 s[10] を宣言し入力データファイルを読み込んで,この配列にデータをセットし、キーボードから,科目番号(物理なら1, 化学なら2),点数の上限,および下限を入力し,その範囲内の点数を持つ学生の学籍番号とその点数を出力ファイルに書き出すプログラムを作成せよ
というプログラムを作成したいのですがうまくいきません。
<データ>
9001 92 77
9002 51 66
9003 56 96
9004 64 89
9005 88 74
9006 89 78
9007 74 76
9008 69 80
9009 67 96
9010 59 67
例えば、化学の70-80点とした場合、9001番の学生がなぜか出ません
いまいちよくわかっていないので間違いを指摘していただきたいです。
###該当のソースコード
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STRING_SIZE 200
typedef struct student_data{
int num;
int phys;
int chem;
}student;
int main(void)
{
int num,phys,chem;
char FileNamein[14];
char FileNameout[14];
student s[10];
char buf[STRING_SIZE]; FILE *fpin,*fpresult; printf("入力>>>"); scanf("%s",&FileNamein); printf("出力>>>"); scanf("%s",&FileNameout); if((fpin=fopen(FileNamein,"r"))==NULL) { printf("ファイルが見つかりません---%s\n",FileNamein); exit(EXIT_FAILURE); } if((fpresult=fopen(FileNameout,"w"))==NULL) { fclose(fpin); printf("ファイルが作成できません---%s\n",FileNameout); exit(EXIT_FAILURE); } int kamoku; printf("科目>>>"); scanf("%d",&kamoku); int jou,kag; printf("\n上限"); scanf("%d",&jou); printf("\n下限"); scanf("%d",&kag); int i; while(fgets(buf,STRING_SIZE,fpin)) { for(i=0;i<10;i++) { fscanf(fpin,"%d %d %d",&s[i].num,&s[i].phys,&s[i].chem); if(kamoku==1) { if(s[i].phys>=kag&&s[i].phys<=jou) { fprintf(fpresult,"%d %d \n",s[i].num,s[i].phys); } } if(kamoku==2) { if(s[i].chem>=kag&&s[i].chem<=jou) { fprintf(fpresult,"%d %d \n",s[i].num,s[i].chem); } } } } fclose(fpin); fclose(fpresult); return EXIT_SUCCESS;
}
回答1件
あなたの回答
tips
プレビュー