
Raj
Ich habe Zweifel bezüglich der Verwendung getchar()
um eine Zeicheneingabe vom Benutzer zu lesen.
char char1, char2;
char1 = getchar();
char2 = getchar();
Ich benötige 2
Zeichen als Eingaben des Benutzers. In diesem Fall, wenn der Benutzer das Zeichen eingibt 'A'
gefolgt von einem newline
und dann der Charakter 'B'
was gespeichert wird char2
– wird es das Newline-Zeichen oder das Zeichen sein 'B'
?
Ich habe es auf CodeBlocks unter Windows versucht und char2
speichert tatsächlich das Zeilenumbruchzeichen, aber ich wollte, dass es das Zeichen speichert 'B'
.
Ich möchte nur wissen, was das erwartete Verhalten ist und ob es vom Compiler abhängig ist? Wenn ja, welche Unterschiede gibt es zwischen Turbo C und MingW?
Ja, Sie müssen nach jeder Eingabe Zeilenumbrüche verbrauchen:
char1 = getchar();
getchar(); // To consume `\n`
char2 = getchar();
getchar(); // To consume `\n`
Dies ist nicht Compiler-abhängig. Dies gilt für alle Plattformen, da am Ende jeder Eingabezeile ein Wagenrücklauf steht (obwohl der tatsächliche Zeilenvorschub je nach Plattform variieren kann).
Ich möchte nur wissen, was das erwartete Verhalten ist und ob es vom Compiler abhängig ist?
Das ist das erwartete Verhalten und nicht Compiler-abhängig.
Sie können verwenden scanf
um A gefolgt von Newline zu lesen, dann B gefolgt von Newline. Wenn du dabei bleiben willst getchar()
geben Sie dann einfach die Eingabe als ein AB
.
Sie können das Lesen von Zeilenumbrüchen verhindern, indem Sie explizit darauf testen. Anstatt einfach zu verwenden
getchar():
du kannst so etwas verwenden
while((char1 = getchar()) == '\n');
Wenn Sie unter Windows arbeiten, möchten Sie vielleicht auch auf ‘\r’ testen. Der Code ändert sich also ein wenig.
while((char1 = getchar()) == '\n' || char1 == '\r');
10130400cookie-checkKlärungsbedarf bezüglich getchar() und newlineyes