私は、ファイルから数学クイズのスコアを読み取り、スコアを星(棒グラフのように)として出力する基本的なc構造とループを使用してプログラムを作成しようとしています。プログラムはファイルを読み取ろうとし、数学のさまざまな領域(加算、減算、乗算、除算)で生徒がどのように実行しているかを視覚的に表現します。
入力ファイルは次のようになります。
2
Bobby
6 10
70 80
50 60
4 5
Joel
7 12
20 25
4 5
3 10
最初の行は、ファイル内の学生の総数を表しています。この後、各生徒は5行の個別データを取得します。これらの行の最初は生徒の名前で、次の4つは数学の個々の領域のスコアです(6つのうち5つ、80つのうち70つなど)。
そして、この例のような出力を受信しようとしています:
Bobby
+: ********
-: ******
*: *****
/: ****
Joel
+: ****
-: ********
*: ***
/: *******
これを実現するにはループとifp(内部ファイルポインタ)を使用する必要があることはわかっていますが、Cで入力ファイルを使用するのは初めてなので、プログラムの個々の行を読み取るためにそれらを実装する方法がよくわかりません。
** 4番目の編集-目的が完了しました!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//int main
int main() {
FILE * ifp;
ifp = fopen("input.txt", "r");
FILE * ofp;
ofp = fopen("output.txt", "w");
int students = 0, i, j;
int sum = 0;
int perc;
int score1,score2;
char name [10];
//read the first line for # of students
fscanf(ifp, "%d", &students);
//Loop for both students
for (i=0; i<students; i++) {
fscanf(ifp, "%s", &name);
fprintf(ofp, "%s:", name);
fscanf(ifp, "%d %d", &score1, &score2);
perc = (10 * score1/score2);
fprintf(ofp, "\n +:");
for(j=0; j<perc; j++){
fprintf(ofp, "*");
}
fscanf(ifp, "%d %d", &score1, &score2);
perc = (10 * score1/score2);
fprintf(ofp, "\n -:");
for(j=0; j<perc; j++){
fprintf(ofp, "*");
}
fscanf(ifp, "%d %d", &score1, &score2);
perc = (10 * score1/score2);
fprintf(ofp, "\n *:");
for(j=0; j<perc; j++){
fprintf(ofp, "*");
}
fscanf(ifp, "%d %d", &score1, &score2);
perc = (10 * score1/score2);
fprintf(ofp, "\n /:");
for(j=0; j<perc; j++){
fprintf(ofp, "*");
}
fprintf(ofp, "\n");
}
fclose(ifp);
fclose(ofp);
return 0;
}
以前のグラフエラーは、私の側の単純な演算子の優先順位エラーだったようです。助けてくれてありがとう!