Ich habe folgendes Programm:
int main(int argc, char *argv[])
{
int a, b;
char c1, c2;
printf("Enter something: ");
scanf("%d",&a); // line 1
printf("Enter other something: ");
scanf("%d", &b); // line 2
printf("Enter a char: ");
scanf("%c",&c1); // line 3
printf("Enter another char: ");
scanf("%c", &c2); // line 4
printf("Done"); // line 5
system("PAUSE");
return 0;
}
Wie ich im C-Buch gelesen habe, sagt der Autor das scanf()
ein neues Zeilenzeichen im Puffer belassen wurde. Daher stoppt das Programm nicht in Zeile 4, damit der Benutzer die Daten eingeben kann, sondern speichert das neue Zeilenzeichen in c2 und wechselt zu Zeile 5.
Ist das richtig?
Kommt dies jedoch nur bei char
Datentypen vor? Weil ich dieses Problem bei int
Datentypen wie in Zeile 1, 2, 3 nicht gesehen habe. Ist es richtig?
fflush(stdin)
vor dem Aufrufscanf()
für ein einzelnes Zeichen verwendet werden kann. Bitte lesen Sie Verwendenfflush(stdin)
für eine Diskussion der Vor- und Nachteile und Alternativen zu dieser Methode (die mehr oder weniger unter Windows funktioniert und an den meisten anderen Orten nicht funktioniert).