2016-07-26 17 views
5

Hier ist der Code unter:Warum hat das ' b' am Ende der Zeichenfolge keine Wirkung?

#include <stdio.h> 

int main(int argc, char* argv[]) 
{ 
    printf("WORD\b\b WORD\b\b"); 
    return 0; 
} 

, die diese Ausgabe erzeugt:

WO WORD 

Die Frage ist, warum die letzte \b nicht Effekt mehr auf das zweite Wort gesagt hat, wenn sie am Ende sind von der Schnur?

+0

Welches OS und Terminal verwenden Sie? – dbush

+5

Ich denke, das liegt daran, dass '\ b' den Cursor nur einen Schritt zurück bewegt und keine Zeichen löscht. Der Grund "R" und "D" ist vom ersten "WORD" weggegangen, weil du sie mit Leerzeichen und "W" überschreibst. – gurka

+1

Was passiert mit "WORD \ b \ b WORD \ b \ b"? Ich vermute, Ihr Terminal bewegt den Cursor zurück, löscht das Zeichen jedoch nicht. – Quentin

Antwort

4

Es hat einen Einfluss, der Effekt bewegt den Cursor zurück, aber '\b' löscht keine Zeichen, außer Sie überschreiben sie.

Wenn Sie später noch etwas drucken möchten, wird der Druckvorgang von der aktuellen Cursorposition aus fortgesetzt.

Hinweis: Dieses Verhalten hängt vom Terminal ab, das Sie zum Anzeigen von Text verwenden.

2

Dies hängt hauptsächlich von der verwendeten Shell/Terminal ab und davon, wie Backspace-Zeichen interpretiert werden.

Das oben beschriebene Verhalten tritt unter Windows in einer Eingabeaufforderung auf. Dieses Terminal bewegt den Cursor scheinbar um ein Leerzeichen zurück, löscht das Zeichen jedoch nicht. Alle nach dem Rückschritt gedruckten Zeichen überschreiben zuvor geschriebene Zeichen.

Zum Beispiel, wenn Sie dies tun sollten:

printf("WORD\b\b WORD\b\bx"); 

Die Ausgabe wäre dies:

WO WOxD 

Im Gegensatz läuft, Ihren Code auf einem Ubuntu-Rechner unter bash Ergebnisse in der folgenden Ausgabe:

WO WO 
Verwandte Themen