自分も>>650がダントツにダサイという>>651の意見に賛成。
理由は、無意味な識別子0,..4を導入しているから。
また、条件演算子(? :)の使い方も不適切なように思える。

今まで出て来た提案の中から最もエレガントな解答は、>>619。
代入演算子(|=)が勘違いさせる余地があるという意見もあるが、
それは単にC言語に不慣れなだけ。>>619のような代入演算子の使用は、
UNIXのドライバやライブラリでは当たり前のように使用されている。

次点は>>614。自分はgoto使わない派だけど、>>614の用法は適切だと思う。

>>619,614の何が良いか?だけど、ロジックのテーブル化(配列変数)が可能である事。
他の解答は、どれもファイル数が増えるたびにロジックを変更する必要がある。
>>619,614をテーブル化したものであれば、テーブル宣言を変更するだけで、
ロジックそのものは変更せずに対応できる。

たかがfopen、されどfopen。皆の解答を楽しませてもらったよ。