Warum funktioniert int count Sprung von 1 bis 4 auf eine Schleife eintritt? C ++
-
22-07-2019 - |
Frage
Mein „counter“ springt von 1 bis 4, wenn ich meine Schleife ein. Irgendwelche Ideen? Code und Ausgabe unter:
static bool harvestLog()
{
ifstream myFile("LOGS/ex090716.log");
if (myFile.fail()) {cout << "Error opening file";return 1;}
else
{
cout << "File opened... \n";
string line;
string field;
int cs_uri_stemLocation = 0;
int csReferrerLocation = 0;
int count = 1;
cout << "-" << count << "-";
while( getline(myFile, line) ) {
if ( strstr(line.c_str(), "cs-uri-stem") &&
(strstr(line.c_str(), "cs(Referer)") || strstr(line.c_str(), "cs(Referrer)")) )
{
cout << "-" << count << "-";
cout << "Found log format: \n";
istringstream foundField(line);
while (!foundField.eof())
{
cout << "-" << count << "-";
foundField >> field;
if (field == "cs-uri-stem") {cs_uri_stemLocation = count;}
if (field == "cs(Referer)" || field == "cs(Referrer)") {csReferrerLocation = count;}
cout << "cs-uri-stem: " << cs_uri_stemLocation << ". ";
cout << "cs(Referer): " << csReferrerLocation << ". ";
cout << "COUNT: " << count << endl;
count++;
}
cout << "Found field cs-uri-stem at position " << cs_uri_stemLocation << "." << endl;
cout << "Found field cs(Referer) at position " << csReferrerLocation << "." << endl;
count = 1;
}
else
{
count = 1;
istringstream foundField(line);
while (!foundField.eof())
{
foundField >> field;
//if (count == cs_uri_stemLocation) cout << field << endl;
count++;
}
//cmatch results;
//regex rx("(?:p|q)(?:=)([^ %]*)");
//regex_search(line.c_str(), results, rx);
//string referringWords = results[1];
//cout << referringWords;
}
}
myFile.close();
return 0;
}
}
-1--4-Gefunden Protokollformat:
-4-cs-uri-Stamm: 0. cs (Referer): 0. COUNT: 4
-5-cs-uri-Stamm: 0. cs (Referer): 0. COUNT: 5
-6-cs-uri-Stamm: 0. cs (Referer): 0. COUNT: 6
-7-cs-uri-Stamm: 0. cs (Referer): 0. COUNT: 7
-8-cs-uri-Stamm: 0. cs (Referer): 0. COUNT: 8
-9-cs-uri-Stamm: 0. cs (Referer): 0. COUNT: 9
-10-cs-uri-Stamm: 10 cs (Referer): 0. COUNT: 10
-11-cs-uri-Stamm: 10 cs (Referer): 0. COUNT: 11
-12-cs-uri-Stamm: 10 cs (Referer): 0. COUNT: 12
-13-cs-uri-Stamm: 10 cs (Referer): 0. COUNT: 13
-14-cs-uri-Stamm: 10 cs (Referer): 0. COUNT: 14
-15-cs-uri-Stamm: 10 cs (Referer): 0. COUNT: 15
-16-cs-uri-Stamm: 10 cs (Referer): 16. COUNT: 16
-17-cs-uri-Stamm: 10 cs (Referer): 16. COUNT: 17
-18-cs-uri-Stamm: 10 cs (Referer): 16. COUNT: 18
-19-cs-uri-Stamm: 10 cs (Referer): 16. COUNT: 19
-20-cs-uri-Stamm: 10 cs (Referer): 16. COUNT: 20
Gefunden Feld cs-uri-stem an Position 10.
Gefunden Feld cs (Referer) an Position 16
Lösung
Ich würde wetten, dass es geht durch die
while (!foundField.eof())
{
foundField >> field;
//if (count == cs_uri_stemLocation) cout << field << endl;
count++;
}
und Sie es nie nach diesem Zweig zurückgesetzt
Andere Tipps
Können Sie nicht einen Debugger anhängen und Schritt durch den Code? Es sieht nicht so aus, wie Sie viele Iterationen gehen zu müssen, bis hin zu gehen, um die Antwort zu sehen. (Wenn diese Visual Studio Sie einfach auf Lauf einen Datenhaltepunkt auf Zahl einstellen könnte. Ich vermute, GDB und die meisten anderen Debugger wird auch dies unterstützen.)
Sie haben nicht die gesamten Code in der Schleife zur Verfügung gestellt - es gibt eine nicht angepaßte offene geschweifte Klammer nach der while-Anweisung. Haben Sie etwas cout Code unten, was Sie extrahiert haben?
Vielleicht ist Ihre if-Anweisung direkt nach der while-Schleife beginnt kommt wieder falsch? Die sonst an, dass, wenn enthält eine Zählung ++ Anweisung in einer Schleife.