• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:初歩的なプログラミングなのですが、頭が混乱してきたので質問します。)

ファイルのデータを逆順に表示する方法

このQ&Aのポイント
  • 初歩的なプログラミングなのですが、頭が混乱してきたので質問します。ファイルを開き、その内部のデータを逆順に表示したいのですが、どのように組んだらよいのかわかりません。
  • 質問者は、ファイルを開いてデータを読み込んだ後、配列に格納し、逆順に表示する方法を知りたいとしています。
  • 質問者が提供したコードは、指定したファイルを開き、データを配列に格納し、逆順に表示する処理を含んでいます。

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

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

> for(y=0;;y++) > fgets(x[y],100,fp); ループの終了判定がありません。このままでは無限ループし、ファイル内容が50行を越えているとメモリを壊していきます。 fgetsがファイル終端まで行けば、それ以上はデータを読み込めないので終了するのが妥当です。また、バッファxは50行分のサイズしかないので、yが50以上になれば中止する必要があります。 > for(;y>=0;y--) > { > printf( "%s",x[y] ); > } yが最後に有効な行を読み込んだ値のままならこれで構いませんが、 fgetsがファイル終端に達した時も、ループ回数がオーバーした時も、おそらく最後の有効な行の値よりも大きくなっているはずなので、その配慮が必要です。 あと、fopenで開いたファイルはちゃんとfcloseで閉じるようにしましょう。

komenukasu
質問者

お礼

回答ありがとうございました! 何となく分かってきました!! ありがとうございます

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

元ファイル ------------ あかさたな     はまやらわ     ↓ 実行後printfでコマンドプロンプトに表示した場合 ------------ はまやらわ あかさたな という意味でしょうか また1行の文字数と行数に制限つきだと char x[50][100] のような配列でもいいですが制限なしだと動的にメモリを確保する必要があります

komenukasu
質問者

お礼

はい! そういう意味です。 …動的にメモリを確保とは、どういう意味なのでしょうか? 理解力無くてすみません… 回答ありがとうございました!

回答No.1

逆順にもいろいろあると思うのですが、 (1) 書かれているプログラムは、読み込んだファイルを、下の行から順番に表示するイメージになっています。 (fgets()は行単位の読み込み) しかし、 (2) > あかさたな    はまやらわ > はまやらわ    あかさたな は、1行のなかが逆転しているイメージです。 もし、横方向(フィールド?)を逆転させたいのなら、 1行をフィールド「あかさたな」「はまやらわ」に分解して、その順番を変えて新しい1行を作るロジックをどこかに挿入する必要があります。

komenukasu
質問者

お礼

1行の中が逆転しているイメージ…ですか? すみません、理解力がとても乏しいので良く分かりませんでした。 ちゃんと勉強します。回答ありがとうございました!

関連するQ&A