2016-08-10 1 views
1

Im Grunde versuche ich, in einer Textdatei zu streamen und die gleichen Informationen in eine andere Textdatei zu streamen.Ein- und Ausgabe einer Textdatei in C++

Allerdings gibt es mir komische neue Zeilen.

Beispiel zu Test txt:

testing this is a test to see if this actually works 

hopefully! 
test 



test 

test 

Dies ist die Ausgabe, die es mir nach dem Test ergibt:

testing this is a test to see if this actually works 
hopefully!test 


test 
test 

möchte ich den Ausgang der gleiche wie der Eingang sein. Aber ich bin mir nicht sicher, was ich falsch mache. Ich bin jetzt seit ein paar Stunden hier festgefahren, lol.

Hier ist mein Code:

string input, name, content; 
cout << "Enter input name and extension (Example: hi.txt)\n"; 
cin >> input; 

ifstream file (input.c_str()); 

if (file.is_open()) { 
    cout << "Enter output name and extension (Example: hi2.txt)\n"; 
    cin >> name; 

    ofstream output(name.c_str()); 

    while (getline(file, content)) { 
     output << content; 

     if (content == "") { 
      output << "\n"; 
     } 
    } 
} 
+1

Haben Sie versucht, 'if (Inhalt ==„\ n“)'? –

+0

Anstatt 'getline()' Zeile für Zeile zu verwenden, sollten Sie 'get()' verwenden, um es in größeren Blöcken (sogar die ganze Sache auf einmal) zu lesen, ohne sich Gedanken über Zeilenumbrüche machen zu müssen. Sie können auch 'getline()' als 'file.getline (content)' aufrufen und Dinge konsistenter halten C++ - ish. –

Antwort

2

std::getline ignoriert das Trennzeichen, das standardmäßig \n ist, wenn es eine Zeile liest. Also, wenn es liest

testing this is a test to see if this actually works\n 

content tatsächlich

testing this is a test to see if this actually works 

Beachten Sie die fehlende Newline sein wird. Deshalb gibt es eine neue Zeile nach jeder Zeile fehlt :)

Sie müssen hinzufügen, dass Trennzeichen verworfen:

output << content << '\n'; //Adds the discarded '\n' delimiter 
+0

Oh! Das macht Sinn! Sehr informativ. Vielen Dank! : D – Dandy