2017-02-21 2 views
-3

Ich arbeite an einem Code, der eine C++ - Quelldatei einliest und alle "<" Symbole in "<" und alle ">" Symbole in ">" konvertiert. Ich habe die Hauptmethode geschrieben und alles schön kompiliert, aber jetzt, da ich tatsächlich meine Convert-Funktion an der Spitze des Programms schreibe, stecke ich in einer Endlosschleife fest und stoße an die Wand, was der Schuldige ist. Könnte mir jemand helfen? Ich habe das ganze Programm für den Fall, dass das Problem in meiner E/A-Codierung liegt, aber ich umgab die Funktion mit Schrägstrichen. Hoffentlich werde ich nicht geflammt.E/A-Programm in Schleife stecken C++

 #include <iostream> 
     #include <fstream> 
     #include <cstdlib> 
     #include <string> 
     #include <cstring> 
     using namespace std; 

//FUNCTION GOES THROUGH EACH CHARACTER OF FILE 
//AND CONVERTS ALL < & > TO &lt; or &gt; RESPECTIVELY 

//////////////THIS IS THE FUNCTION IN QUESTION////////// 
void convert (ifstream& inStream, ofstream& outStream){ 
    cout << "start" << endl; 
    char x; 
    inStream.get(x); 
    while (!inStream.eof()){ 
     if (x == '<') 
      outStream << "&lt;"; 
     else if (x == '>') 
      outStream << "&gt;"; 
     else 
      outStream << x; 
    } 
    cout << "end" << endl; 
}; 
/////////////////////////////////////////////////////////////////////////// 


int main(){ 

    //FILE OBJECTS 
    ifstream inputStream; 
    ofstream outputStream; 
    string fileName; 
    //string outFile; 

    //USER PROMPT FOR NAME OF FILE 
    cout << "Please enter the name of the file to be converted: " << endl; 
    cin >> fileName; 
    //outFile = fileName + ".html"; 

    //ASSOCIATES FILE OBJECTS WITH FILES 
    inputStream.open(fileName.c_str()); 
    outputStream.open(fileName + ".html"); 

    //CREATES A CONVERTED OUTPUT WITH <PRE> AT START AND </PRE> AT END 
    outputStream << " <PRE>" << endl; 
    convert(inputStream, outputStream); 
    outputStream << " </PRE>" << endl; 

    inputStream.close(); 
    outputStream.close(); 

    cout << "Conversion complete." << endl; 

    return 0; 
} 
+2

Das richtige Werkzeug, um solche Probleme zu lösen ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage bearbeiten, um ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel einzufügen, das Ihr Problem zusammen mit den Beobachtungen, die Sie in der Debugger. –

+2

Hier sind zu viele Fehler. Beginnend mit dem altbewährten 'while! Foof'-Bug und endend mit einem Loop Of Mystery, der magisch erwartet, dass irgendeine Variable ihren Wert ohne Grund irgendwo in der Schleife ändert ... –

+2

Unglaublich schwer das Ende zu erreichen der Datei in einer Schleife, die nie aus der Datei liest. – user4581301

Antwort

0

Es ist kein guter Ansatz, eine Datei zu manipulieren, während Sie sie lesen. Der richtige Weg ist, zuerst read die ganze Datei, store die Daten, manipulate die gespeicherten Daten und dann update die Datei. Hoffe, dieser Code wird Ihnen helfen :)

void convert() 
    { 
     int countLines = 0; // To count total lines in file 
     string *lines; // To store all lines 
     string temp; 
     ifstream in; 
     ofstream out; 
     // Opening file to count Lines 
     in.open("filename.txt"); 
     while (!in.eof()) 
     { 
      getline(in, temp); 
      countLines++; 
     } 
     in.close(); 
     // Allocating Memory 
     lines = new string[countLines]; 
     // Open it again to stroe data 
     in.open("filename.txt"); 
     int i = 0; 
     while (!in.eof()) 
     { 
      getline(in, lines[i]); 

      // To check if there is '<' symbol in the following line 
      for (int j = 0; lines[i][j] != '\0'; j++) 
      { 
       // Checking the conditon 
       if (lines[i][j] == '<') 
        lines[i][j] = '>'; 
      } 
      i++; 
     } 
     in.close(); 
     // Now mainuplating the file 
     out.open("filename.txt"); 
     for (int i = 0; i < countLines; i++) 
     { 
      out << lines[i]; 
      if (i < countLines - 1) 
       out << endl; 
     } 
     out.close(); 
    } 
Verwandte Themen