• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++でfscanf関数・fprintf関数を利用した成績処理のプログ)

C++で成績処理のプログラムを作成|ファイルの読み込み・書き込みに問題あり

このQ&Aのポイント
  • C++で成績処理のプログラムを作成していますが、ファイルの読み込み・書き込みに問題があります。
  • 具体的には、氏名が正しく出力されず、点数も最後の行しか読み込まれません。
  • どのように修正すれば正しく出力できるか教えてください。

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

  • ベストアンサー
  • ram551
  • ベストアンサー率100% (2/2)
回答No.2

うまく出力できないというか、まず正しくデータが読み込めていませんね。 他の方も解凍されていますが、配列にはちゃんと要素を区切って読み込む 必要があります。 おそらく fscanf(fp,"%s",kamokumei); printf("%s\n",kamokumei); fscanf(fp,"%s",shimei); printf("%s\n",shimei); の4行でkamokumeiの配列に、材料力学、熱力学・・・と全部入り、 次のprintfで全部まとめて表示されることを期待していると 思いますが、配列はそんな風には使えません。 例えば以下のようにすることで正しく読み込めます。 fscanf(fp,"%s %s %s %s %s", &kamokumei[0], &kamokumei[1], &kamokumei[2], &kamokumei[3], &kamokumei[4]); printf("%s %s %s %s %s", kamokumei[0], kamokumei[1], kamokumei[2], kamokumei[3], kamokumei[4]); fscanf(fp,"%s %s %s %s %s %s %s %s %s %s", &shimei[0], &shimei[1], &shimei[2], &shimei[3], &shimei[4], &shimei[5], &shimei[6], &shimei[7], &shimei[8], &shimei[9]); printf("%s %s %s %s %s %s %s %s %s %s", shimei[0], shimei[1], shimei[2], shimei[3], shimei[4], shimei[5], shimei[6], shimei[7], shimei[8], shimei[9]); edit()の中のfprintfも同じように直す必要があります。 点数の読み込み部分もこれまでの内容を理解したうえで試行錯誤してみてください。

minty_hot
質問者

お礼

回答ありがとうございます。 fscanfとfprintfを使ったプログラムは初めてだったので、とても参考になりました。

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

>fscanf(fp,"%s %s %s %s %s", &kamokumei[0], &kamokumei[1], &kamokumei[2], &kamokumei[3], &kamokumei[4]); >printf("%s %s %s %s %s", kamokumei[0], kamokumei[1], kamokumei[2], kamokumei[3], kamokumei[4]); >fscanf(fp,"%s %s %s %s %s %s %s %s %s %s", &shimei[0], &shimei[1], &shimei[2], &shimei[3], &shimei[4], &shimei[5], &shimei[6], &shimei[7], &shimei[8], &shimei[9]); >printf("%s %s %s %s %s %s %s %s %s %s", shimei[0], shimei[1], shimei[2], shimei[3], shimei[4], shimei[5], shimei[6], shimei[7], shimei[8], shimei[9]); for文でループを構成する方が格段に美しいと思う。

回答No.1

 ちゃんと要素を区切って読み込まないと、データの整形は出来ませんよ。  EOFまで読み込んでるwhile文のループも単に空読みしてるだけ。きちんと読み込んで配列に取り込まないと、最後の行しか残りません。  C言語の制御構造とか、配列の使い方とか、基本から勉強し直してください。

minty_hot
質問者

お礼

回答ありがとうございます。 しばらくC言語に触れていなかったからか基本的なことを忘れていました。

関連するQ&A

専門家に質問してみよう