- ベストアンサー
C言語でCSVファイルからデータを読み取りリストに入れ、なぜ無限ループするか教えてください
- C言語で書かれたソースコードについて、関数内でCSVファイルからデータを読み取り、リストに入れて、先頭を指すポインタをmain内に返す作業をしています。しかし、なぜ無限ループするのかが分かりません。どなたか教えていただけませんか?
- C言語で書かれたソースコードです。関数内でCSVファイルからデータを読み取り、リストに入れて、先頭を指すポインタをmain内に返す作業をしていますが、なぜ無限ループするのかが分かりません。どなたか教えていただけませんか?
- C言語で書かれたソースコードについて、関数内でCSVファイルからデータを読み取り、リストに入れて、先頭を指すポインタをmain内に返すという作業をしています。しかし、なぜ無限ループするのかが分かりません。どなたか教えていただけませんか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まず、他の場所のロジックは確認していません。その点はご了承を。 fscanfの仕様だと、「0個以上の読み込みに成功/残りは変換フォーマットと不一致」のときはEOFではなく成功した個数が返ります。そして、次は読み込みが成功した後から始まるので、だいたいは続いて不一致となります。 例えば、この例なら 最初の%dに対して、入力が数字でなかった →戻り値 は 0(!=EOF) →次のfscanfは上の「数字でなかった」ところから始まる →やはり最初の%dで不一致 →戻り値 は 0(!=EOF) →次のfscanfは上の「数字でなかった」ところから始まる 以下永遠に続く となります。 どっかで、カンマの数が違うとかがあるのではないでしょうか あるいは、このやり方では"で括った中身を別扱いしてくれないので、"AAA,BBB"などとあったら"AAAとBBB"に別れてしまいます。 EOFによる終了チェックだけではなく、全部読めているかの確認も必要です
その他の回答 (2)
- dscripty
- ベストアンサー率51% (166/325)
入門者のようだから、(f)scanf のメモリ破壊や、スペースが含まれているファイル名が指定できないのは放置するね。 「"%d,%[^,],%[^,],%[^,],%d,%d,%[^,]"」 最後の %[^,] って次の行の数字まで読み込んでるような気がするけど大丈夫かな? あと、引数の top は NULL だから渡してもいみないよ。 あと、top って名前付けてるけど、last になってるとおもう。 はじめに c やらせて、崖に突き落とすと、今後の学習でなにか有利なのかなぁ~。なぞ。
お礼
ありがとうございました。指摘されたことをもとにして改良し無事に完成することができました。本当に助かりました!ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
無限ループとは関係ありませんが, #1 で指摘されたところを直しても期待したリンクリストはできません.
お礼
改良してなんとかできました! アドバイスありがとうございました。
お礼
ご指摘のようにカンマ不足でした。 なんとか完成までこぎつけられました! ありがとうございました!