質問内容
- 2重while文でテキストファイルを開こうとすると,途中でファイルが開けなくなります.
- 今回使うテキストファイルは,3000行3列で,1000枚近くあります.
- i = 500 付近ででテキストファイルが開けなくなります.(以下のコードより)
- クローズ(close(fp);)しています.
原因が分かる方がいましたら,回答して頂けると幸いです.
簡略化したコード
C++
1#define MAX_BUFFER_SIZE 1024; 2 3 4int i; 5 6 7while (1) 8{ 9 FILE *fp; 10 11 fopen_s(&fp, (to_string(i) + ".txt").c_str(), "rt"); 12 13 14 15 16 char fp_BUFFER[MAX_BUFFER_SIZE]; 17 18 while (1) 19 { 20 if (fgets(fp_BUFFER, MAX_BUFFER_SIZE, fp) != NULL) 21 { 22 sscanf_s(fp_BUFFER, "%lf\t%lf\t%lf\n", &x, &y, &z); 23 } 24 else 25 { 26 fclose(fp); 27 break; 28 } 29 30 31 } 32 33 34 35 i++; 36 37 38 if (i == 1000) 39 { 40 break; 41 } 42 43}
イメージ図
コードを省略して貼るときは、
省略したコードでも問題が発生することを確認してから貼ってください
「ファイルが開けなくなります」とは、fopen_sでエラーになるということですか?それとも処理が進まなくなるということですか?
「500付近」とは、毎回500付近の同じ数でとまるのですか?実行するごとに500付近で、ばらつきがあるということですか?
正確には毎回,506番目で処理が進まなくなります.
『fp==NULL』になってしまいます.
ozwkさんが書かれているように、簡略化した最低限のコードでも問題が再現することを確認したのち、そのコードを全文、載せてください。簡略化したコードで問題が再現しないようであれば他回答で示されているように、別の部分に問題がある可能性が高いです。fopen_s のerrno_t型の返り値でエラーの詳細が分かるのでそちらも確認し、問題部分を切り分けてください。
https://docs.microsoft.com/ja-jp/cpp/c-runtime-library/reference/fopen-s-wfopen-s?view=msvc-160
該当するファイルは、ちゃんとあるのでしょうか?506.txt、507.txtが該当のフォルダに存在していることをご確認ください。
返信遅れてしまい申し訳ございません.
506.txt、507.txtとそれ以降のファイルも存在しています.
x,y,zの宣言がありませんので、追記してください。
また、506.txt前後のファイルを開き、データが仕様通りに格納されているか、ご確認ください。
加えて、iの初期値を500にした場合の動作も、ご確認ください。
500からでも506で止まるようなら、繰り返しとは無関係と判断できますので。
ベストアンサーを選ばれておられますが、原因は何だったのでしょうか?
簡単なコメントで構いませんので、その辺りをご説明頂ければ幸いです。
2重while文では,テキストファイルを最後まで開くことが出来ました.3重のwhile文でテキストファイルを開く際に途中で開くことが出来ないことに気づき,また別で質問しようと思い,ベストアンサーを選ばさせて頂きました.
ご迷惑をおかけして申し訳ございません.
質問の文章が悪かったようで申し訳ありません。
「2重while文で、途中でファイルが開けなくなる」という不具合は、なんらかの修正で解消された、ということで、よろしいでしょうか?
その不具合は、どのような原因で発生していて、どのように修正して、解消されたのでしょうか?
それとも、そもそも、「2重while文で、途中でファイルが開けなくなる」という認識が誤りだった、ということでしょうか?
すみません。
そもそも2重while文で途中でファイルが開けなくなるという認識が誤りでした。
回答4件
あなたの回答
tips
プレビュー