51632


ファイルから読み取った文字列の内容によって、開くファイルを分岐で区別して、そこに書いてある数字を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回目にも開かれ、それはきちんと読み取れていました。もちろんクローズもされています。

【 補足】  
全て書くと多いので、必要と思われるソースだけ追記します。

[code]

    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(''〜'');//実行されない
    
[/code]

また、読み込みファイルのフォーマットを

[code]

    7 3
    
[/code]

のように修正しても結果は同じでした。


CC BY-SA 4.0
2018-12-31T04:18:56.860
51627
2018-12-31T13:35:05.337
2018-12-31T13:35:05.337
2238
31624
question
c
fscanfが実行されません。


示されている範囲で、原因わかりません。

参考になるかわかりませんが、コメントです。

（１）  
これは、改行があるからダメでは？  
/////////////////  
7

3  
////////////////

（２）

”このファイルはループの20回目にも開かれ”  
２２回目の誤記ですか？

（３）  
unit[i]の配列サイズは、十分ですか？

（４）トータルとして、  
意識している部分と違う部分が誤っている気がします。

以上


CC BY-SA 4.0
2018-12-31T10:19:47.943
51632
2018-12-31T10:19:47.943
31548
51627
answer