- ベストアンサー
C言語・ファイルから読み込んだものを使用する
現在C言語のある課題に取り組んでいるのですが、 ファイルから単語をいくつか読み込む、という作業がうまくいきません。 ファイルから読み込んだ単語は「s[i]」という文字列構造体にひとつずつ入れていくのですが、ファイルに入れた単語が10個に対し、 その作成しようとしているプログラムは1000個まで読み込めるものにしているため、printfで読み込んだ単語を画面に出力すると 11個目以降が訳のわからない文字になってしまいます。 どうやったら、scanfを読み込むファイルの最後でとめることができるか、誰か教えてください!
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
初めまして、 配列をちゃんと初期化してから使いましょう。
その他の回答 (3)
- RAPTsong
- ベストアンサー率42% (74/175)
回答No.4
scanf 系はストリームから入力変数に取得できた数を返すので、 下記の例では 1 と等しいかどうかで取得できたかどうかを 判断できます。 if ( fscanf( ストリーム, 書式, 入力変数 ) != 1 ) { // 読み込み終了 }
- kb-nike
- ベストアンサー率36% (72/200)
回答No.3
scanf() → fscanf() でしょうか。 ファイルの終わり: fscanf()はファイルの終わりで、EOF を返しますから、それで判定できます。
質問者
補足
そうです。fscanf()です。間違えました。 if()でfscanfがEOFを返したときにファイルを閉じ,ループを止めるシステムを使っているんですが,うまくいかなかったんです。
noname#77845
回答No.2
#1さんの回答に付け足しで…。 何回入力したかをカウントしておいて、その数を使ってループをくみ表示させる。
質問者
補足
投稿する前に試みましたが,カウント自体がうまくいっていませんでした。投稿記事にちゃんと詳細を書いていなくてすみません。
お礼
ありがとうございました。ご指摘のとおり、やはり初期化をしていなかったことに問題がありました。 ファイルから中に入っている英単語を読み取り、アルファベット順に直すという課題でしたが、うまく作れました。
補足
その可能性濃厚かもしれません。アドバイスありがとうございます。 charの場合ってどうやって初期化するんでしたっけ・・・。