- ベストアンサー
C++で成績処理のプログラムを作成|ファイルの読み込み・書き込みに問題あり
- C++で成績処理のプログラムを作成していますが、ファイルの読み込み・書き込みに問題があります。
- 具体的には、氏名が正しく出力されず、点数も最後の行しか読み込まれません。
- どのように修正すれば正しく出力できるか教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
うまく出力できないというか、まず正しくデータが読み込めていませんね。 他の方も解凍されていますが、配列にはちゃんと要素を区切って読み込む 必要があります。 おそらく 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も同じように直す必要があります。 点数の読み込み部分もこれまでの内容を理解したうえで試行錯誤してみてください。
その他の回答 (2)
- asuncion
- ベストアンサー率33% (2127/6289)
>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文でループを構成する方が格段に美しいと思う。
- magicalpass
- ベストアンサー率58% (378/648)
ちゃんと要素を区切って読み込まないと、データの整形は出来ませんよ。 EOFまで読み込んでるwhile文のループも単に空読みしてるだけ。きちんと読み込んで配列に取り込まないと、最後の行しか残りません。 C言語の制御構造とか、配列の使い方とか、基本から勉強し直してください。
お礼
回答ありがとうございます。 しばらくC言語に触れていなかったからか基本的なことを忘れていました。
お礼
回答ありがとうございます。 fscanfとfprintfを使ったプログラムは初めてだったので、とても参考になりました。