2013-09-04 13 views
9

Dieses Programm kopiert seinen Eingang in seinen Ausgang und ersetzt TAB (\t) durch \t Backspace (\b) durch \b. Aber hier in meinem Code kann ich nicht Eingabezeichen lesen, wenn ich die Rücktaste eingeben es nicht ersetzen, wie ein Tab funktioniert.Verstehen des Backspace-Verhaltens ( b) in C

Kompilieren mit GCC in Linux:

#include<stdio.h> 
int main(void) 
{ 
    int c=0; 
    while((c=getchar())!=EOF){ 
    if(c=='\t'){ 
     printf("\\t"); 
    if(c=='\b') 
     printf("\\b"); 
    } 
    else 
    putchar(c); 
} 
return 0; 
} 

Angenommen, wenn ich vinay (tab) hunachyal

Output:vinay\thunachyal 

geben Wenn ich vinay (und 1 Backspace) Typ

Output:vina 

So Meine Frage ist, warum vina\b in diesem Fall nicht gedruckt wird?
Ist es möglich, \b zu erkennen und \b zu drucken? wenn nicht, was ist der Grund,

Note: ich zur Laufzeit Eingang Backspace benötigen keine separate Datei bereitstellt \ b mit

Antwort

7

Die Backspace von dem Shell-Interpreter verbraucht werden, so dass Ihr Programm wird es nie sehen, auch Ihr Code (leicht) gebrochen, aufgrund von fehlplatzierten Zahnspangen, nicht unterstützt durch die schlechte Eindrückung. Hier

ist eine korrigierte Version:

#include<stdio.h> 
int main(void) 
{ 
    int c=0; 
    while((c=getchar())!=EOF){ 
     if(c=='\t') 
      printf("\\t"); 
     else if(c=='\b') 
      printf("\\b"); 
     else 
      putchar(c); 
    } 
    putchar('\n'); 
    return 0; 
} 

, die wie erwartet funktioniert:

$ echo 'vinay\thunachyal\b' | ./escape 
vinay\thunachyal\b 
+0

Gibt es eine Möglichkeit, Backspace von Shell gegessen zu vermeiden, ohne separate Datei zu generieren, brauche ich zur Laufzeit Backspace-Schlüssel –

+0

sogar mein Code funktioniert auch Wenn ich 'Vinay \ Thunachyal \ b' | ./a.out, aber meine Abfrage gibt es eine Möglichkeit, Backspace bei d Laufzeit des Programms zu erkennen, wie Registerkarte arbeitet @runtime wie diese Backspace, korrigieren Sie mich, wenn ich falsch bin. –

+0

@vinayhunachyal Ja, dein Programm macht das. Das Problem hier ist einfach, wie Sie die Rücktaste zum Programm bekommen. Die Verwendung von echo, wie oben beschrieben, scheint ein einfacher Ansatz zu sein. – trojanfoe

4

Wenn ich nicht die Frage falsch verstanden haben, können Sie 'Strg-H' verwenden, um eine Backspace zu schicken . Mit trojanfoe des korrigierten Code, wenn Sie Folgendes eingeben:

vinay^H 

Es druckt:

vinay\b 

^H bedeutet 'Strg-H', es ist ASCII-Zeichen # 8, die Backspace ist.

Verwandte Themen