2017-09-30 1 views
1

Iterieren, ich habe ein großes Problem mit meinen Schleifen. Was das Programm macht: Das Programm liest eine Textdatei und gibt jeder Zeile der Textdatei ein Zeichenfolgenformat. Die Daten, die ich in der Zeichenkette haben möchte, sind durch Tabulatoren getrennt, so dass ich die Tabs durchsuche und alle Zeichen aufzählen muss, bis ich auf die erste Registerkarte klicke. Ich füge dann die Zeichen bis zum Tab hinzu und füge es zu einem Array hinzu, damit ich später die Daten auswerten kann.C++ While-Schleife nicht zur nächsten Zeile in der Textdatei

Meine innere while-Schleife analysiert meine erste Zeile korrekt, aber nicht zur nächsten Zeile in der Textdatei.

//Creates a temporary array 
string current_line; //declare var line 
string temp_string = ""; 
//When getline hits 'n' we are adding that to the string current_line 
cout<<"Entering the Loop \n"<<endl; 

// Gets the first line in the Text file and continutes to get each new line 
// until we hit the end of file 
while(getline(infile,current_line,'\n').good()){ 

    //cout << "CURRENT SIZE " << current_line.size() << endl; 

    /* iterates through each character as long as the size of the current 
    line is greater than the counter i 
    */ 
    while(i < current_line.size()){ 

     // If the Current character in the line is NOT a tab we add the 
     // character to string temp_storage 
     if(current_line[i] != '\t'){ 
      temp_storage +=current_line[i]; 
      } 

     /*If the Current Character in the line is a tab then we store 
     string temp_storage into another variable. Temp is cleared so we 
     can get the next word in the string 
     */ 
     else if (current_line[i] =='\t'){ 
      Storage = temp_storage; 
      cout << "Current val: "<< Storage <<endl; 
      // Clears the temporary storage 
      temp_storage = ""; 
      cout << "Clearing the temp_storage..."<< temp_storage<<endl; 
      } 
     //out << i << endl; 
     i++; // iterates the loop 
    } 
    cout<<"loop finished"<<endl; 
} 

// Hier ist die Ausgabe das Programm

Vielen Dank für das Lesen der laufenden!

enter image description here

+2

nie zurücksetzen ich für die nächste Zeile –

+0

@ArtemyVysotsky Ich habe total vermisst, danke, so viel! – Rustykatz

+0

@MichaelBurr Will danke! – Rustykatz

Antwort

1

Wenn Sie nicht in ‚modernen‘ Sachen wie Stream-Iteratoren sind, dann würde ich die ‚alten‘ konstruiert, wie sie gedacht waren. Versuchen Sie eine for Schleife. Eine while-Anweisung kann alles, aber wenn Sie nur mit Zähler iterieren, ist eine for-Schleife einfach viel besser geeignet.

Wenn Sie das getan hatten, man kaum falsch gegangen sein könnte:

In Ihrem Code

for (int i=0; i<current_line.size(); i++)

kann die i sogar ein beliebigen Wert hat diesen Codeabschnitt eingeben.

+1

Nur ein Vorschlag ..., würde ich die Antwort umzuformulieren, um freundlicher zu sein – purpletentacle

+0

@purpleentacle OK Ich sehe was du meinst. Hoffentlich ist es jetzt besser. –

Verwandte Themen