• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルから読み込むC言語の問題)

ファイルから読み込むC言語の問題

このQ&Aのポイント
  • C言語の問題: ファイルから読み込み、奇数と偶数の合計値・個数・平均値を出力する方法を教えてください。
  • C言語の問題: ファイルから読み込み、奇数と偶数のデータを分けて合計値・個数・平均値を出力する方法を教えてください。
  • C言語の問題: ファイルから読み込む方法と、奇数と偶数のデータを分ける方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

解説は下の方です。 ---------------------------------------------------------------------- 1:#include <stdio.h> 2: 3:#define SIZE 10 4: 5:int main(void) 6:{ 7:  FILE *infile; 8:  int i, data[SIZE]; 9:  int ksum, knum, gsum, gnum; 10:  ksum = 0; 11:  gsum = 0; 12:  infile = fopen("file.txt", "r");/* ここでファイルをオープンしているが、クローズする処理がない。 */ 13: 14:  if(infile == NULL) { 15:    printf("入力ファイルを開くことができません\n"); 16:  else{ 17:    fscanf(infile, "%d"); 18: 19:    if(data[i]%2){/* 変数iをここで参照しているが、初期化されていないのは良くない× */ 20:      ksum += data[i]; 21:      knum += 1;/* 初期化されてない変数knumに加算している。のは良くない× */ 22:    } 23:    else if(data[i]/2==0){/* 偶数であるか調べる判定はこれではない、× */ 24:      gsum += data[i]; 25:      gnum += 1;/* 初期化されてない変数gnumに加算している。のは良くない× */ 26:    } 27:  } 28:   29:  return 0; 30:} 31: 32:/* ↓ここから下がmain()関数の外になっている。のは良くない× */ 33:for(i = 0; i < SIZE; i ++ ) { 34:  fscanf(infile, "%d", &data[i]); 35:} 36: 37:for(i = 0; i < SIZE; i ++ ) { 38:  printf(" %3d", data[i]); 39:} 40: 41:printf("%d %d %f", ksum, knum, (double)ksum/knum); 42:printf("%d %d %f", gsum, gnum, (double)gsum/gnum); 43: 44:return 0; 45:}/* 対応する括弧が存在しません。× */ 46: ---------------------------------------------------------------------- ●初期化せずに使用している変数があります。変数は使用前に初期化しましょう。 i, knum, gnum ●ファイルをオープンしている処理はあるが、クローズしていない。 ファイルはオープンしたら、クローズしましょう。 ● >17:    fscanf(infile, "%d"); この処理を、ループの外に書いちゃうのは、アルゴリズムを理解していないのではないですか? これでは、10件のデータは読み込めません。 ●main()関数が途中で、終わっている。 途中から、ソースコードが関数の外に書いてある。 ● >45:}/* 対応する括弧が存在しません。× */ 閉じ括弧がありますが、対応する開く括弧がありません。 どこが間違っているのか、よく確認しましょう。 ●「奇数データの数・偶数データの数がゼロの場合は、平均値を求めない」 >もうひとつ「奇数データの数・偶数データの数がゼロの場合は、平均値を求めない」というのはどのように表せば良いのでしょうか? カウントを利用してあげると良いと思います。

tiom
質問者

お礼

丁寧な解説をありがとうございます。 いただいた解説を元に修正していったところ、うまく実行することができました。 とてもわかりやすく、本当に助かりました。 もう一度、ありがとうございました。

関連するQ&A