2016-06-18 20 views
1

ich echo "1 2\n h a\n hello" | ./a.out möchte mich geben:c - print jede Zeile in stdin

1 2 
h a 
hello 

Hier ist meine aktuellen Code ist, der den gesamten Eingangs 1 2\n h a\n hello auf eine Zeile druckt:

#include <stdio.h> 
#include <string.h> 

int main (void) 
{ 
    char buffer[256]; 

    while (fgets(buffer, sizeof(buffer), stdin)) { 
     printf("%s",buffer); 
    } 
} 

kann jemand helfen Ich mit diesem Problem?

+0

Dann sollte die Eingabe '1 2 \ n h a \ n hallo' sein. Konvertieren Sie den String '\ n' selbst in Newline. – MikeCAT

+0

Beachten Sie, dass am Anfang der zweiten und dritten Zeile ein Leerzeichen angezeigt wird, weil Sie nach dem Zeilenumbruch in der gechlossenen Zeichenfolge ein Leerzeichen eingefügt haben - nachdem Sie die Daten mit '\ n' zu a erweitert haben Neue Zeile. Sie könnten 'printf% s \ n" "1 2" "h a" "hallo" | verwenden a.out' als weitere Möglichkeit, das gewünschte Ergebnis zu erzielen. (Beachten Sie auch, dass Sie viel von Ihrem eigenen Debugging tun können, indem Sie einfach die Ausgabe von 'echo" 1 2 \ nha \ n hallo "' beobachten, ohne es an Ihr Programm zu übergeben. Eine Standard-Debugging-Technik besteht darin, sicherzustellen, dass Ihr Programm es sieht die Daten, die Sie erwarten, dass sie sehen.) –

Antwort

4

Standardmäßig konvertiert Echo keine Escape-Sequenzen, daher wird "\n" buchstäblich an Ihre Datei gesendet. Siehe unten:

$ echo "1 2\n h a\n hello" 
1 2\n h a\n hello 

Sie wahrscheinlich gemeint zu tun:

echo -e "1 2\n h a\n hello" | ./a.out 

Welche der folgenden a.out umleitet:

1 2 
h a 
hello 

Wenn Sie nicht möchten, dass diese zusätzlichen Leerzeichen vor h a und hello, entfernen Sie die Leerzeichen nach der \n 's.

Das Flag -e weist Echo an, Escape-Sequenzen zu konvertieren.