senno'...
prova ad inserire:

fflush(stdin);

nel ciclo che causa lo stallo. Si dovrebbe fermare.
Allora, ricapitolando:
leggi il double con il solito scanf, %f
e successivamente, sempre dentro il ciclo ci metti fflush(stdin);
cosi' facendo se legge qlks che non è float(double) non cicla all'infinito! poi ti gestisci tu la condizione di uscita del ciclo.