ifstream endlosschleife?
-
halloo,
ich bin eig noch so ziemlicher anfänger in c++ und versuche gerade eine datei per ifstream zu öffnen und darin zu suchen, aber irgendwie funktioniert da was nicht, weil die messagebox in einer endlosschleife ausgeführt wird. hier mal der code:
void Starten(const char *filename) { std::ifstream Datei; Datei.open(filename, std::ios::in); int vD = 0; if(!Datei.eof()) { std::string Line; while(getline(Datei,Line)) { if(Line.find("x")) { vD++; } } for(int i = 0; i <= 3; i++) { MessageBox( NULL, "Hallo", "Error", MB_OK | MB_ICONERROR ); } } };danke schonmal
-
aber irgendwie funktioniert da was nicht
Und was nicht?
Zeile 6 und 9 ergeben nicht gerade Sinn, hast du da was vertauscht? Probier mal:
void Starten( const char *filename ) { std::ifstream Datei; Datei.open( filename, std::ios::in ); int vD = 0; while( !Datei.eof( ) ) { std::string Line; getline(Datei,Line)) if(Line.find("x")) { vD++; } for(int i = 0; i <= 3; i++) { MessageBox( NULL, "Hallo", "Error", MB_OK | MB_ICONERROR ); } } };(Code ungetestet)
Wobei ich mich ernsthaft frage, warum du 3-mal eine MessageBox( ) ausgeben möchtest?
-
@Kóyaánasqatsi,
Dein Code führt die äussere Schleife einmal zu oft aus. DaseofbitFlag wird erst gesetzt, wenn über das Ende hinaus gelesen wurde und nicht, wenn der Stream am Ende steht.Auch macht die if-Abfrage wahrscheinlich nicht das, was er erwartet. Wenn X nämlich nicht gefunden wurde, wird
std::string::nposzurückgegeben, was ungleich 0 ist und somittrueergibt.Also alles ein wenig umgebaut:
void Starten(const char *filename) { std::ifstream Datei; Datei.open(filename, std::ios::in); int vD = 0; std::string Line; while(getline(Datei,Line)) // Lesen solange es geht. { if(Line.find('x') != std::string::npos) // Gefunden? { ++vD; } // MessageBoxes rausgenommen. Wofür?? } };Grüssli
-
1. gibt es c++ tags
2. war das komisch eingerücktalso ma richtig:
void Starten(const char *filename) { std::ifstream Datei; Datei.open(filename, std::ios::in); int vD = 0; if(Datei.is_open()) // { std::string Line; while(getline(Datei,Line)) { if(Line.find('x') != std::string::npos) { vD++; } } for(int i = 0; i <= 3; i++) { MessageBox( NULL, "Hallo", "Error", MB_OK | MB_ICONERROR ); } } }ansonsten weiß ich nicht, warum es nicht gehen sollte ^^
bb
edit: huch - hab ich doch glatt den gleichen fehler beim find gemacht

-
danke sehr, jetzt funktionierts!