C
0. Alle Funktionen der scanf()-Familie arbeiten gleich, der einzige Unterschied ist die Quelle, von der sie ihre Daten bekommen (scanf()-Tastatur, fscanf()-Datei, sscanf()-char-Array).
1. scanf() liest solange, bis es den kompletten Formatstring abgearbeitet hat (oder ein Fehler aufgetreten ist. Das heißt, am Ende bleibt das erste Zeichen im Speicher stehen, das nicht zum Formatstring gepasst hat (und das ist typischerweise das \n). Afaik gibt es auch Möglichkeiten, im scanf() selber das Zeilenende abzufangen, aber auch dann hast du mit dem while(getchar()!='\n'); keine Endlosschleife, sondern wartest nur auf das nächste ENTER.
(zur Sicherheit könntest du die Bedingung ergänzen um ein &&!feof(stdin) )
2. scanf() benötigt selber kein ENTER - das \n wird als ganz normales Whitespace behandelt. Die ENTER-Taste hat nur vor deiner Verarbeitung eine Bedeutung, um die Eingabezeile aus dem Tastaturpuffer an dein Programm weiterzugeben.