Il motivo è "semplice".
Quando tu leggi un valore decimale usando la scanf(), quello che accade dietro le quinte è questo:
Il programma attende che tu immetta l'input.
E tu scrivi, ad esempio:

100<INVIO>

La scanf() analizza la stringa ricevuta (è nel buffer), estrae il valore 100 che viene memorizzato nella variabile float, rimuove questo valore dal buffer e poi il programma prosegue.
Nel buffer, quindi rimane l'INVIO.

Questo INVIO viene letto dalla succesiva getchar().

Quindi il programma termina.

Se vuoi, puoi provare a rimuovere la riga del getchar() e ad aggiungere questo alla fine (prima dell'istruzione return) e vedrai che il programma prima ti stampa il carattere letto dal buffer e poi si ferma

codice:
int ch = getchar();
printf("\n\n"Carattere: %d\n", ch);
while(getchar() != 'q');
Ora per terminare il programma devi premere "q" (minuscola) e invio.