C言語のファイル入力でわからない問題があります

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
初心者

C言語のファイル入力でわからない問題があります

#1

投稿記事 by 初心者 » 3ヶ月前

ファイルから生徒の成績データを読み取りそのデータをもとに平均値と評価をつけてその結果をまた別のファイルに書きこむという問題です。

(構造体を用いる)

構造体:(構造体は学生数と各々の学生の履修する科目数に応じて動的に割りつけるものとする)
typedef struct seiseki {
int number;
int *score;//スコア配列の先頭ポインター
int size_score;//スコア配列のサイズ
double ave;
char hyouka;
} SCORE;

(ファイルの例)
ファイルには次のようにデータ"score.dat"が、テキストで書かれてあるものとする。
152 <-人数(何人になるかは予めわからないものとせよ)
10001 <-学籍番号
3 <-履修科目数
40 55 72 <-それぞれの科目の点数
10002 <-学籍番号
10 <-履修科目数
55 80 70 65 40 90 80 70 64 70 < -それぞれの科目の点数
10003 <-学籍番号
....

code
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct seiseki {
int number;//学籍番号
int *score;
int size_score;
double ave;
char hyouka;
}SCORE;
void evaluate(SCORE *score);

int main(void) {
FILE *rfp;
SCORE *scores;
char buf[100][256];
int N,i=0; //学生の人数

rfp = fopen("score.dat","r");
if(rfp == NULL){
printf("ファイルが開けません");
exit(1);
}

????

return 0;
}
void evaluate(SCORE *score){
const int* const end = &score->score[score->size_score];
const int* p = score->score;
if (p < end) {
int sum = *p++;
while (p < end)
sum += *p++;
score->ave = (float)sum / score->size_score;
} else
score->ave = 0.f;
if(score->ave >= 90){
score->hyouka = 'S';
}else if(score->ave < 90 && score->ave >= 80){
score->hyouka = 'A';
}else if(score->ave < 80 && score->ave >= 70){
score->hyouka = 'B';
}else if(score->ave < 70 && score->ave >= 60){
score->hyouka = 'C';
}else if(score->ave < 60){
score->hyouka = 'D';
}
}
/code


平均と評価を求める関数は作れましたが、ファイルを読み込みそれを計算して別のファイルに書きこむという部分のプログラムがわからないので教えていただけますでしょうか。

アバター
VANQUISH
記事: 5
登録日時: 5年前
住所: 日本
連絡を取る:

Re: C言語のファイル入力でわからない問題があります

#2

投稿記事 by VANQUISH » 3週間前

長い間返信がないようなので、オーナーさんがまだ見られているか分かりませんが回答してみようと思います。
単純にファイルを開いてその内容を読み取るCの標準関数を使うという回答になってしまいますがすみません( ˘ω˘u

(???の部分に)
while((chr = fgetc(rfp)) != EOF) {
putchar(chr);
}

https://www.sejuku.net/blog/24615から引用
ファイルの内容を取得するのはfgetc関数で出来るようです。
これでファイルの内容を読みだしてwhileの中のputchar~を改造してやればいいと思います。
テキストファイルであれば 二次元配列で variable[row][col] みたいなchar型(もしくはint型)でいけるんじゃないでしょうか

別のファイルに書き込む関数もfopen("書き込み先のファイル名.dat","w")にしてやれば
後はfprintf(rfp, "%s", chr)などにしてやればいいかなと思います。
具体的な回答できなくてすみません^_^;

返信

“C言語何でも質問掲示板” へ戻る