Probabilmente è perché mischi fgets e scanf.
scanf non pulisce il buffer, quindi prima di utilizzare una fgets devi pulirlo manualmente.
Aggiungi questo prima di ogni fgets che succede uno scanf
codice:
while(getchar()!='\n');
Attento a non metterla fra 2 fgets però.