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.