Penso anch'io che il problema sia quello.
Solita spiegazione: la modalità di input predefinita (per gli amici "cooked") prevede che l'input ricevuto da tastiera possa essere fornito alle funzioni che lo richiedono solo quando viene premuto il tasto INVIO.
Il tasto INVIO è un carattere come gli altri per cui viene aggiunto al fondo del buffer di input (è un buffer interno che può essere manipolato quando serve) e spedito al pari degli altri caratteri.
Ora mettiamo il caso che ci siano due scanf("%c") di fila: appena l'utente immette il carattere (ad esempio 'a') e preme INVIO la prima riceverà il carattere 'a' e la seconda, trovando un carattere inutilizzato nel buffer di input se lo mangerà, con la spiacevole conseguenza che hai riscontrato.
Il problema si risolve formalmente utilizzando una fflush(stdin) dopo ogni funzione di input "a rischio", oppure con dei trucchetti che è meglio evitare, come ad esempio l'uso improprio di una getchar() in modo da intercettare il carattere di troppo.

Ciao!