質問: ファイルから読み取った文字列の内容によって、開くファイルを分岐で区別して、そこに書いてある数字をfscanfで読み取り、クローズするというのをループするプログラム(その間ストリームポインタは同じものを使っています)なのですが、コンパイルも通り実行もエラーはなかったのですが、全て読み取ってループを抜けた後のprintfの出力がされませんでした。 調べると、22回のループのうち21回目までは読み取れていましたが、最後の22回目のfscanfの前まではstderrが出力され、その直後はstderrが出力されず、当然その後のprintf等も通らずに実行が終了していました。これはどうしてなのでしょうか。fscanf文と読み取るファイルは以下の通りです。iはループカウンタです。 fscanf(fp1, ''%d %d'', &unit[i].p_num, &unit[i].t_num); 読み取りファイル ///////////////// 7 3 //////////////// このファイルはループの20回目にも開かれ、それはきちんと読み取れていました。もちろんクローズもされています。 【 補足】 全て書くと多いので、必要と思われるソースだけ追記します。 ``` for(i=0; i<22; i++){ if((fp1=fopen(''sw.txt'',''r''))==NULL){ //i=19,21の時通るようにしてある printf(''ファイルが見つかりません''); exit(EXIT_FAILURE); } //ここでelse{}を作ると通る //iがいくつでもここでのstderrは実行される fscanf(fp1, ''%d %d'', &unit[i].p_num, &unit[i].t_num); //i=21の時ここでのstderrが実行されない fclose(fp1); } printf(''〜'');//実行されない ``` また、読み込みファイルのフォーマットを ``` 7 3 ``` のように修正しても結果は同じでした。
回答: 示されている範囲で、原因わかりません。 参考になるかわかりませんが、コメントです。 (1) これは、改行があるからダメでは? ///////////////// 7 3 //////////////// (2) ”このファイルはループの20回目にも開かれ” 22回目の誤記ですか? (3) unit[i]の配列サイズは、十分ですか? (4)トータルとして、 意識している部分と違う部分が誤っている気がします。 以上