Klärungsbedarf bezüglich getchar() und newline

Lesezeit: 2 Minuten

Benutzer-Avatar
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 newlineund 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).

  • eine kleine frage: wird getchar() die daten einfach spülen, platz nehmen, um das LF zu speichern?

    – Fuev

    14. Oktober 2019 um 12:01 Uhr

  • Der Aufruf von @hikaru89 getchar() gibt einfach die zurück Wert. Wenn es nicht im Programm gespeichert wird (wie hier der 2. und 4. Aufruf), wird es verworfen und erfordert keinen zusätzlichen Speicherplatz.

    – PP

    23. Oktober 2019 um 21:15 Uhr

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');

  • fflush() auf einem Eingabestrom ist gemäß dem C-Standard ein undefiniertes Verhalten. Es funktioniert unter Windows, zumindest in Visual Studio, sollte aber wahrscheinlich vermieden werden, da es kein Standard ist.

    – Thomas Padron-McCarthy

    22. September 2012 um 13:48 Uhr

1013040cookie-checkKlärungsbedarf bezüglich getchar() und newline

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy