Can't see a problem with your loops they run from 0..n-1 so it must be fgets behaviour. I will hazzard a guess cin for entering number of cases doesn't remove the new line character and fgets sees it and drops thru first time.
Might be nice for user and debugging to put a prompt on the screen in that loop as well .. like "Entry x: " :-)
cout << "Entry " << l+1 << ":";
Basically just use the debugger put a break point on the fgets statement and follow what happens.
I am not sure you want to start mixing fgets and cin as cin isn't based around newline behaviour while fgets is.
Other quibbles the format of main is usually
int main(int argc, char**argv)
and struct case should really be defined above and outside main as eventually you will want procedure and functions to be able to use it.