• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:同時にファイル読み込み 書き込み)

同時にファイル読み込み 書き込み

このQ&Aのポイント
  • ヒストグラムのプログラムを作成しています。0~255の1000個の乱数ファイルdata.txtを読み込み、ヒストグラムは出来たものの、エクセルでグラフを作るためにdata1.txtに書き込みたいが、カウントが全て0になってしまう。どうすれば良いか教えてください。
  • ヒストグラムのプログラムを作成していますが、読み込んだ乱数ファイルdata.txtを基にヒストグラムを作成することはできました。しかし、エクセルでグラフを作成するためにはdata1.txtに書き込む必要があり、その際にカウントがすべて0になってしまいます。どうすれば正常にカウントできるでしょうか。
  • ヒストグラムのプログラムを作成中です。乱数ファイルdata.txtを読み込んでヒストグラムを作成することはできましたが、エクセルでグラフを作るためにはデータをファイルdata1.txtに書き込む必要があります。しかし、ファイルdata1.txtに書き込むと、カウントがすべて0になってしまいます。どのように修正すれば良いでしょうか。

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

  • ベストアンサー
回答No.1

読み込みと書き込みの両方のファイルの変数がfpになっています。 別のファイルなんですから別の変数にしましょう。 fp2とか。

dragonkei
質問者

お礼

出来ました! ありがとうございます。

その他の回答 (2)

  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.3

あっ、失礼しました^^; わたしが意味を取り違えておりました。申し訳ありません。 以下のようですねかね(n が 0 以上、MAX 未満かなどはチェックしてませんが)。 ==== #include <stdio.h> #define MAX 256 int main(void) { FILE *fp = fopen("data.txt", "r"); int counter[MAX] = { 0 }; int i, n; while (fscanf(fp, "%d", &n) == 1) ++counter[n]; fclose(fp); fp = fopen("data1.txt", "w"); for (i = 0; i < MAX; ++i) fprintf(fp, "%d %d\n", i, counter[i]); fclose(fp); return 0; }

dragonkei
質問者

お礼

こちらのソースファイルで動作することが出来ました。 ありがとうございます。

  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.2

ほんとにきちんと読めてますか?count()内でcounter[n]++; としているのとか。。それに、書き出し用にオープンしているのに、書き出すときに標準出力に出しているようですし。。。エラー処理をしないとして、やりたいことは、 === #include <stdio.h> #define MAX 256 int main(void) { FILE *fp = fopen("data.txt", "r"); int counter[MAX] = { 0 }; int i, n = 0; for (i = 0; i < MAX; ++i) { if (fscanf(fp, "%d", counter + i) != 1) break; ++n; } fclose(fp); fp = fopen("data1.txt", "w"); for (i = 0; i < n; ++i) fprintf(fp, "%d %d\n", i, counter[i]); fclose(fp); return 0; } === こんな感じですか?読み込んだ個数をカウントしているので、counter の0での初期化は必要ありませんけどね(int counter[MAX]; で十分)。