K
scanf hat einen Rückgabewert, der dir mitteilt, ob die Umwandlung in den richtigen Typ geglückt ist.
Beispiel:
int x, status;
status = scanf("%i", &x);
Bei einer Eingabe 'a' hat status den wert 0, da a nicht in den Typ int umgewandelt werden kann. Bei der Eingabe 3 hätte status den Wert 1, da eine Umwandlung erfolgt ist. Außerdem gibt es noch den Rückgabewert EOF, der bei einem Problem beim Einlesen auftritt.
Bei der Eingabe 3a hätte status zwar den Wert 1, da 3 ein int Wert ist, das a würde aber im Eingabe-Puffer bleiben. Man muss also noch überprüfen, ob sich Restzeichen im Puffer befinden, also, ob das nächste Zeichen im Puffer '\n' ist (Bei einer korrekten Eingabe ist '\n' immer das letzte Zeichen, da mit Enter bestätigt wird). Dafür bietet sich getchar(); an.