• ベストアンサー

C言語・ファイルから読み込んだものを使用する

現在C言語のある課題に取り組んでいるのですが、 ファイルから単語をいくつか読み込む、という作業がうまくいきません。 ファイルから読み込んだ単語は「s[i]」という文字列構造体にひとつずつ入れていくのですが、ファイルに入れた単語が10個に対し、 その作成しようとしているプログラムは1000個まで読み込めるものにしているため、printfで読み込んだ単語を画面に出力すると 11個目以降が訳のわからない文字になってしまいます。 どうやったら、scanfを読み込むファイルの最後でとめることができるか、誰か教えてください!

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

  • ベストアンサー
  • ponnta
  • ベストアンサー率17% (31/179)
回答No.1

初めまして、 配列をちゃんと初期化してから使いましょう。

Rucas
質問者

お礼

ありがとうございました。ご指摘のとおり、やはり初期化をしていなかったことに問題がありました。 ファイルから中に入っている英単語を読み取り、アルファベット順に直すという課題でしたが、うまく作れました。

Rucas
質問者

補足

その可能性濃厚かもしれません。アドバイスありがとうございます。 charの場合ってどうやって初期化するんでしたっけ・・・。

その他の回答 (3)

  • RAPTsong
  • ベストアンサー率42% (74/175)
回答No.4

scanf 系はストリームから入力変数に取得できた数を返すので、 下記の例では 1 と等しいかどうかで取得できたかどうかを 判断できます。 if ( fscanf( ストリーム, 書式, 入力変数 ) != 1 ) {   // 読み込み終了 }

  • kb-nike
  • ベストアンサー率36% (72/200)
回答No.3

scanf() → fscanf() でしょうか。 ファイルの終わり: fscanf()はファイルの終わりで、EOF を返しますから、それで判定できます。

Rucas
質問者

補足

そうです。fscanf()です。間違えました。 if()でfscanfがEOFを返したときにファイルを閉じ,ループを止めるシステムを使っているんですが,うまくいかなかったんです。

noname#77845
noname#77845
回答No.2

#1さんの回答に付け足しで…。 何回入力したかをカウントしておいて、その数を使ってループをくみ表示させる。

Rucas
質問者

補足

投稿する前に試みましたが,カウント自体がうまくいっていませんでした。投稿記事にちゃんと詳細を書いていなくてすみません。

関連するQ&A