• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:なぜ無限ループになるかが分かりません。)

無限ループの原因を教えてください

このQ&Aのポイント
  • 関数内でCSVファイルからデータを読み取り、そのデータをリストに入れて、先頭を指すポインタをmain内に返すと言う作業をさせたくて書いたソースです。
  • なぜ無限ループするのか分かりません。
  • どなたか教えていただけませんか?

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

実際にドコで無限ループしているのかは不明ですが… >printf("読み込むファイルの名前を入力してください>>>"); >scanf("%s",FileName); バッファオーバーフロー可能です。 >q = Rfile(FileName,top); topが無駄です。 >strcpy(filename,FileName); filenameが無駄です。 >while( (ret = fscanf( fp, "%d,%[^,],%[^,],%[^,],%d,%d,%[^,]", &(new->ID), new->Sname, new->Fname, new->Adress, &(new->Sex), &(new->Age), new->Group ) ) != EOF )//ファイルの最後でないなら fscanf()で指定している書式と違うモノが入った場合、予想しない挙動になるかもしれませんが…そのヘンは大丈夫ですか? # ここでのエラーによりfscanf()が進まなくてEOFに届かない…のかな? fgets()で取り込んで自分で解析処理する(もちろんエラー処理も)とか、 同じくfgets()で読み込んでからsscanf()に渡す。とか…エラー処理は考慮した方がいいでしょう。 >while(top->next != NULL){ >top = top->next; >} >top = new; 最終的にtopが書き換えられます。 よって、本当の意味での先頭を保持している変数が居なくなり…ませんか? リスト構造の扱いに関して、理解が足りていない…と思われます。 各変数がドコを指しているのか?という点には注意された方がいいでしょう。 あと… [技術者向] コンピューター > プログラミング > C&C++ というカテゴリがありますから、そちらの方が適切でしょう。

biggest5555
質問者

お礼

無事に完成させることができました! ご指摘のようにリスト構造の理解が足りていない事も身にしみて実感することができました。 とても丁寧にソースを見て指摘いただき大変助かりました。 ありがとうございました。

その他の回答 (1)

  • t1568647
  • ベストアンサー率26% (214/795)
回答No.2

なんでこんな事このカテゴリーで書いたかな~ それようのカテあるから運営に通知して移動するように書いておく

biggest5555
質問者

お礼

すいません。初質問だったためにどんなカテゴリがあるかちゃんと把握できていませんでした。お手数掛けました。ありがとうございました。