ファイルから読み取った文字列の内容によって、開くファイルを分岐で区別して、そこに書いてある数字を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

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