Außer vor %c,%[],%n werden von *scanf alle aktuell vorliegenden Whitespaces übergangen, ein " %c" entfernt also alle evtl. an der aktuellen Stelle im Eingabepuffer vorliegenden Whitespaces, wozu auch (wie in diesem Fall) '\n' gehört, und liest dann erst ein Zeichen ein, sonst würde z.B. das '\n' als Zeichen gelesen werden. (ist dokumentiert so im Standard oder Drafts oder kompetenter Fachliteratur)
Ist aber auch nur unzureichend, versuche mal, bei deiner Fließkommazahl "aus Versehen" einen Buchstaben mit einzugeben, dann ist das Programm auch wieder Schrott.
Also wenn, dann gleich richtig, d.h. nach jeder Nutzereingabe von stdin immer den Eingabepuffer vollständig und standardkonform löschen.
Wie das geht, steht hier in den FAQ und in kompetentem Lehrmaterial.