> fgets( types, sizeof(char)*4, fp );

これfread()つかったほうがいいんじゃないの。
偶然改行コードと同じデータが入ってたら、そこで読み込みが終わる。