Il problema dipende dal fatto che prima di acquisire il primo nome hai eseguito una scanf:

scanf("%d", &Ncognomi);

con cui acquisisci da input un numero: l'acquisizione di un numero non toglie dall'input il carattere di 'a capo' che inserisci premendo invio, quindi se la successiva scanf è fatta su una stringa o un carattere, poichè il buffer di input contiene ancora il carattere di a capo, la scanf acquisisce tale carattere e ritorna, cosi a te sembra che quella scanf non sia stata eseguita, mentre è stata eseguita e ha letto il carattere di a capo rimasto da prima.

Per evitare questo problema inserisci l'istruzione:

fflush(stdin);

subito dopo ogni scanf su un numero o un carattere o immediatamente prima di eseguire una scanf.