4 Stimmen

Warum und wie erscheinen die folgenden Ausgaben, die einen Zeilenumbruch enthalten?

#include 

void main()
{
    printf("ab");
    printf("\bsi");
    printf("\rha");
}

dieser Code gibt auf dem GCC 4.8 Compiler die Ausgabe "ha" aus

#include 

void main()
{
    printf("ab");
    printf("\bsi");
    printf("\rha");
    printf("\n");
}

dieser Code gibt auf dem GCC 4.8 Compiler die Ausgabe "hai" aus

Jetzt die Frage: Warum ändert sich die Ausgabe von "ha" zu "hai", wenn einfach die Anweisung printf("\n"); am Ende hinzugefügt wird, was (nach meiner Meinung) den Code aufgrund der vorhergehenden Zeilen nicht beeinflussen sollte.

5voto

Greg Hewgill Punkte 882617

Wenn Ihr Programm endet, schreibt die Shell die Eingabeaufforderung ab der letzten Cursorposition. Nach \rha sitzt der Cursor also auf dem i. Die Shell überschreibt das i mit dem ersten Zeichen Ihrer Eingabeaufforderung.

Im zweiten Fall geben Sie am Ende ein \n aus, das den Cursor in die nächste Zeile verschiebt, wo die Shell ihre Eingabeaufforderung schreibt.

2voto

Vikas Sangle Punkte 632

Zunächst müssen Sie die Leerzeichenzeichen verstehen:

  1. \n :: Es bewegt den Cursor zur nächsten Zeile.
  2. \b :: Es bewegt den Cursor um ein Zeichen zurück auf der Konsole. Löscht einfach ein Zeichen zurück.
  3. \r :: Wagenrückläufe. Es bewegt den Cursor an den äußersten rechten Rand derselben Zeile.

Das Ergebnis der printf-Anweisungen ist:: 1. Druckt "ab", Cursor sitzt am Ende der Zeile. 2. Druckt "asi" nach dem Zurücksetzen des Cursors um einen Platz (\b), Cursor sitzt am Ende einer Zeile. 3. Druckt "hai", Cursor sitzt nach ha, direkt unter i.

Also, AUSGABE :: hai

Im ersten Fall können Sie das 'i' aufgrund des Cursors nicht sehen, während Sie es im zweiten Fall aufgrund des Zeilenumbruchszeichens sehen können

0voto

enedil Punkte 1605

Wenn Sie den ersten Code kompilieren, befindet sich der Cursor anstelle von i, sodass Sie dies nicht sehen können. Im zweiten Code befindet sich der Cursor in einer neuen Zeile und deckt keinen Buchstaben ab.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X