2017-03-27 3 views
0

Ich habe den folgenden Code, wo ich versuche, die Anzahl der Zeilen in einer Eingabedatei zu zählen, und ich habe mehrere verschiedene Möglichkeiten der Implementierung versucht, aber kein Glück.Was ist die optimale Bedingung für das Zählen von Zeilen in der Textdatei?

int checkData(string File) 
{ 
string temp; 
int linecount = 0; 
ifstream input(File); 
input.open(File); 

while() 
    { 
     getline(input,temp); 
     linecount++; 
     temp.clear(); 
    } 
return linecount; 

}

Bisher habe ich versucht:

while(!input.eof()) 
    { 
    ... 
    } 

und

while(getline(input,temp).good()) 
    { 
    ... 
    } 

Der erste tut die Schleife brechen, und ich bin nicht ganz sicher, warum . (Ich bin mir ziemlich sicher) dass getline einen eingebauten Stream-Puffer hat, so sollte es automatisch die Netzleitung lesen, jedes Mal wenn ich in eine Linie ziehe und es zurückwerfe, aber keine Würfel. Für die Sekunde wird die Schleife überhaupt nicht ausgeführt, was für mich immer noch keinen Sinn ergibt (das besagt, dass die erste Zeile der Datei keine gute Eingabe ist?). Die Testdatei Ich verwende ist:

this is a test  this  Cake 
this is a test  this  Cake 
this is a test  this  Cake 
this is a test  this  Cake 

So sollte Linecount als 4 zurückkehren, wenn sie richtig ausgeführt wird. Bevor ich das ausführe, habe ich bereits überprüft, ob die Datei korrekt geöffnet wird.

output

+3

Das erste ist wohlbekanntes Problem. Das Entfernen von '.good()' von Sekunde sollte es lösen. – Incomputable

+0

Gerade ausgeführt, und es führt immer noch nicht die While-Schleife beim Entfernen der .good() Flag. –

+1

@GrahamWilson Sie sollten dies überprüfen - Entfernen von gut() sollte in der Tat Ihr Problem beheben (nicht nur im Prinzip; Ich kopierte und kompilierte Ihren Code). BTW, temp.clear() ist nicht notwendig. – jwimberley

Antwort

2
int number_of_lines = 0; 
string line; 
ifstream myfile("textexample.txt"); 
while (std::getline(myfile, line)) 
    ++number_of_lines; 

Hoffe, es hilft.

Verwandte Themen