2017-12-22 8 views
2

Ich versuche, alle Zeilen einer bestimmten Datei zu lesen.
Aus irgendeinem Grund funktioniert std::getline nicht wie erwartet.
main.cpp:Kann nicht aus einer Datei lesen, seltsames Verhalten

#include <iostream> 
#include <fstream> 
#include <string> 
int main() { 
    std::string filePath = "../init.txt"; 
    std::ifstream inputFile(filePath); 
    std::string str; 
    int i = 0; 
    while (std::getline(inputFile,str)) { 
     std::cout << str << std::endl; 
     i++; 
    } 
    std::cout << i << std::endl; 
    inputFile.close(); 
    return 0; 
} 

../init.txt:

Game 
battlefieldSize,100,200 
players,2 
soldiers,3 
p1,human 
normal,[2 3],M16 
paramedic,[10 31] 
sniper,[5 12],UZI 
p2,computer,0 
normal,[90 112],Missile 
sniper,[90 113],M16 
normal,[65 100],M16 
Objects 
weapon,M16,[5 5] 
Armor,BodyArmor,0.8,[1 2] 
weapon,Missile,[15 115] 
solid,Tree,4,4,[20 20] 

Wie Sie sehen können, wollte ich, wie viel mal wissen, dass es die Schleife ist Eingabe mit variabler i. Die Ausgabe ist:

solid,Tree,4,4,[20 20] 
1 

Warum passiert das?

+1

Kann nicht auf meinem Desktop duplizieren. –

+0

Einer meiner Freunde hatte diese Art von Verhalten mit 'std :: getline'. Sein Code war auch völlig in Ordnung, aber aufgrund der älteren Version von IDE kompiliert er falsch. Ich weiß nicht, wie es Ihnen geht, OP, aber wenn Sie Code Code Blocks blockieren und es von einer anderen Quelle als dem Original-Entwickler heruntergeladen haben, laden Sie es bitte erneut herunter und installieren Sie es neu – Fureeish

+0

Kann nicht duplizieren. Gibt es ein Problem mit 'std :: string filePath =" ../ init.txt ";'? Vielleicht liest du noch eine andere "init.txt" -Verzeichnisstufe? – j4nu5

Antwort

6

Ihre Datei hat CR Zeilenumbrüche statt LF, die für Unix-Betriebssysteme Standard ist, so wird getline() die gesamte Datei als eine einzige Zeile zu lesen. Sie können die Datei in Terminal mit beheben:

tr '\r' '\n' <init.txt> newinit.txt 
mv newinit.txt < init.txt 
+0

Welchen Gefallen fordern Sie? Wenn Sie eine Aufwertung meinen, habe ich das getan. – Barmar

+0

Ich verstehe nicht, wovon du sprichst. Was hat das mit dieser Frage zu tun? – Barmar

+0

Fragen Sie mich, um mit dieser Frage zu helfen: https://stackoverflow.com/questions/47780622/mysql-left-join-incorrect-result – Barmar