codice:
while ((c = getchar()) != '\n') 
titolo[50] = c;
char prende come input i caratteri dalla tastiera fino al newline, li assegna a c, e c a titolo.

non mi è chiaro se con questo codice vorresti prendere una stringa e assegnarla a titolo.
Perché ci metti "titolo[50]"?
1. quel "50" come indice indica il 51 elemento dell'array (ricorda che partono da zero e non da uno), quindi vai oltre lo spazio dell'array stesso
2. perché 50 fisso? Con quel codice vorresti prendere in input una stringa o mi sbaglio?
se è così perché non fai "gets(titolo);" ?