2017-03-22 4 views
-2

Ich versuche ein Programm zu erstellen, das Text aus einer Datei einliest und nach bestimmten Wörtern sucht, dann verarbeite ich von dort aus. Ich verwende Arrays, um die Daten zu speichern, die ich will, aber wenn ich versuche, auf das Array außerhalb der Funktion zuzugreifen, ist nur der erste Punkt im Array belegt, und es ist mit dem letzten Wert, der von der Funktion gelesen wird. Natürlich ist der Code unvollständig, aber ich muss wissen, was das verursacht?Warum behalten meine Arrays außerhalb der Funktion keine Werte?

#include<iostream> 
#include<string> 
#include<fstream> 

using std::cout; using std::cin; using std::endl; using std::string; 
using std::ifstream; using std::getline; 

string data, strL = "language", strC = "created", strT = "timestamp"; 
string lang[2], date[2]; 
int count = 0, l = 0, c = 0; 
ifstream rawData("testsample.txt"); 

void search(int count, string data, string heading) { 
int x, y; 
if (data.find(heading) != string::npos) { 
    //cout << heading << endl; 
    if (heading == strL) { 
     x = 4; y = 2; 
     lang[count] = data.substr(data.find(strL) + strL.length() + x, y); 
     //cout << lang[count] << endl; 
    } 
    if (heading == strC) { 
     x = 4; y = 29; 
     date[count] = data.substr(data.find(strC) + strC.length() + x, y); 
    } 
} 
count++; 
} 

int main() { 
while (getline(rawData, data)) { 
    search(l, data, strL); 
    search(c, data, strC); 
    //count++; 
}cout << lang[0] << " " << lang[1] << endl; 
cout << date[1]; 

return 0; 
}  
+2

Der abgebildete Code ist ein unversöhnliches Chaos. Globale Variablen. Bizarre, unlogische Einrückung, die an manchen Stellen zufällig verschwindet. Magische Konstanten. Was auch immer es zu tun versucht, es kann nicht richtig sein, und es gibt keine Möglichkeit, es richtig zu machen, kurz davor, das Ganze zu verwerfen und von vorne anzufangen. –

Antwort

0

Ich denke, das Problem liegt in der Tatsache, dass Sie globalen Variable count, und auch einen Parameter an die Funktion searchcount haben. Die count++ Anweisung innerhalb der search Funktion inkrementiert den Parameter, nicht die globale. Da in dieser Funktion keine Schleife vorhanden ist, ist der Index, den Sie lang und date zuweisen, immer Null.

Das Entfernen des Parameters kann dazu führen, dass der Code das tut, was Sie möchten. Wenn Sie jedoch mehr als zwei davon verarbeiten, werden Sie überlaufen. Sie könnten in Erwägung ziehen, std::vector oder eine andere dynamisch skalierende Containerklasse zu verwenden.

Verwandte Themen