2016-06-26 16 views
2

Ich bin neu in der Sprache C und ich studiere es in einem Buch von Kim N. King. Es sagt, dass die scanf() nach Zahlmuster sucht, die die whitespaces ignorieren, aber ich denke, dass es auch Enter-Taste überspringt. Wenn es nach Zeichen sucht, nimmt es natürlich auch das Leerzeichen.Ignoriert die Scanf-Funktion die Eingabetaste, wenn nach% d gesucht wird?

Daher muss ich getchar()getchar() verwenden, um den Stream vor dem zweiten scanf() zu löschen, andernfalls würde der zweite ausgeführt werden, ohne auf Benutzereingaben zu warten.

printf("Enter a char: "); 
scanf("%c", &ch1); 
getchar(); 
printf("\nEnter another char: "); 
scanf("%c", &ch2); 

Wenn ich stattdessen Ziffern suche, habe ich keine Probleme.

Ist meine Annahme (es überspringt die Eingabetaste) richtig?

+0

Was ist "Stichwort eingeben"? Ein Newline-Zeichen ist einer von Leerzeichen. – MikeCAT

+0

Whitespaces sind nicht notwendigerweise einzelne Leerzeichen. 'issspace' sucht nach Leerzeichen, die Zeilenumbrüche, Wagenrückläufe, Zeilenvorschübe, vertikale/horizontale Tabulatoren und einzelne Leerzeichen sind (vielleicht habe ich einige vergessen). – Downvoter

+0

Entschuldigung ich meine Enter-Taste, oder Return-Taste. Ich bearbeite es. – VeVeVez

Antwort

3

Drücken Sie ENTER Tasteneingaben a newline (\n), die ein Leerzeichen ist.

Zitiert C11, Kapitel §7.21.6.2, fscanf()

Eine Richtlinie, dass die Umwandlungsspezifikation ist eine Reihe von passenden Eingangssequenzen definiert, als für jeden Spezifizierer beschrieben. Eine Umwandlungsspezifikation in den folgenden Schritten ausgeführt wird:

  1. Eingangsleerraumzeichen (wie durch die isspace Funktion angegeben) übersprungen werden, es sei denn, die Spezifikation ein [, c umfasst, oder n Spezifizierer. [....]

So ja, jede führende Leerzeichen (in dem Eingangspuffer) ist (sind) übersprungen oder für %d ignoriert.

+1

danke für das darauf hingewiesen. – VeVeVez