2016-12-02 3 views
0

Hi ich versuche, die Anzahl der Zeilen und die Anzahl der Zeichen in einer TXT-Datei zu zählen, nach 1 Funktion, die die Zeilen zählt (es funktioniert) die Char Counter dosent Arbeit aber wenn Ich benutze den Char-Zähler allein es funktioniert. (Ich weiß, ich es auf eine Funktion mischen kann, aber ich habe ein größeres Problem, dass dieses Beispiel beheben)C++ fstream dosent Arbeit nach 1 Funktion (durch Referenz)

Main:

int main() 
{ 
    ifstream isf("D:\\test.txt", ios_base::in); 
    ofstream osf("D:\\test.txt", fstream::app); 
    //WriteToFile(osf,isf); 
    cout << CountLines(isf)<< endl; 
    cout << CountChar(isf) <<endl; 
    isf.close(); 
    osf.close(); 
    return 0; 
} 

die Funktionen:

const int CountLines(ifstream& isf) 
{ 
    int count = 1; 
    char c; 
    while (isf.get(c)) 
    { 
     if (c == '\n') 
      ++count; 
    } 
    return count; 
} 
const int CountChar(ifstream& isf) 
{ 
    int count = 0; 
    char c; 
    while (isf.get(c)) 
    { 
     ++count; 
    } 
    return count; 
} 

die txt-Datei:

abc 
abc 

die Ausgabe:

2 
0 
Press any key to continue . . . 

und sollte die Ausgabe

sein
2 
7 
Press any key to continue . . . 

Antwort

1

Sie müssen zurückgesetzt werden, den Strom in die Ausgangsposition nach dem ersten Aufruf der Funktion:

cout << CountLines(isf)<< endl; 
isf.clear(); // Reset stream states like eof() 
isf.seekg(0); // <<<<<<<<<<<<<<<<<< 
cout << CountChar(isf) <<endl; 
+0

es noch dosent Arbeit – Rokni

+0

@Rokni Wie _ "es funktioniert nicht "_ speziell? Vielleicht kann das Hinzufügen eines 'isf.clear()' helfen, den Stream-Zustand vollständig zurückzusetzen. –

+0

es funktioniert nicht, aber wenn ich ihre Reihenfolge ändern, tut es. il bearbeite deinen Beitrag und markiere ihn als Antwort Danke, du musst nur den Schnitt überprüfen :) – Rokni

Verwandte Themen