?
Das Problem ist, dass scanf() beim ersten Zeichen, das nicht mehr dem gesuchten Muster entspricht, aufhoert zu lesen. Im Idealfall ist das das Zeilenende ('\n'), wenn man Pech hat, dann halt irgendwas anderes. Im letzteren Fall wird ein erneutes scanf() vermutlich nicht das erwartete Ergebnis liefern. Man kriegt das zwar schon wieder synchronisiert, aber am besten vermeidet man so was einfach schon im Vorfeld. Man kann z.B. zuerst die ganze Zeile mit fgets()in einen Puffer einlesen und den dann mit sscanf() zerdroeseln.
Aber ok, wenn man's wirklich nur mit scanf() machen will, dann gibt's dazu zwei Dinge zu sagen. Zum einen sollte man den Rueckgabewert von scanf() nicht ignorieren und pruefen, ob tatsaechlich die erwartete Anzahl von Feldern gelesen wurde. Was man auch tun sollte, ist mit fgetc(stdin) zu pruefen, welches Zeichen zum Abbruch gefuehrt hat. Wenn fgetc() ein '\n' oder EOF liefert, dann ist alles ok. Wenn nicht, dann enthielt die Eingabezeile unerwartete Zeichen. In dem Fall liegt ein Eingabefehler vor und man sollte in einer Schleife mit fgetc(stdin) so viele Zeichen auslesen, bis ein '\n' gelesen oder das Fileende (ja, das gibt's auch bei stdin!) erreicht wurde. Danach hat man wieder seine Ruhe.