- ベストアンサー
無限ループの原因を教えてください
- 関数内でCSVファイルからデータを読み取り、そのデータをリストに入れて、先頭を指すポインタをmain内に返すと言う作業をさせたくて書いたソースです。
- なぜ無限ループするのか分かりません。
- どなたか教えていただけませんか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
実際にドコで無限ループしているのかは不明ですが… >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++ というカテゴリがありますから、そちらの方が適切でしょう。
その他の回答 (1)
- t1568647
- ベストアンサー率26% (214/795)
なんでこんな事このカテゴリーで書いたかな~ それようのカテあるから運営に通知して移動するように書いておく
お礼
すいません。初質問だったためにどんなカテゴリがあるかちゃんと把握できていませんでした。お手数掛けました。ありがとうございました。
お礼
無事に完成させることができました! ご指摘のようにリスト構造の理解が足りていない事も身にしみて実感することができました。 とても丁寧にソースを見て指摘いただき大変助かりました。 ありがとうございました。