programm bleibt beim Lesen der Datei hängen.get-Funktion
Frage
Ich erstelle ein Programm auf win32, das Programm reagiert nicht mehr auf.funktion abrufen, ich weiß nicht, was ich sonst tun soll, ich denke, das Problem liegt bei std::ifstream inFile;
aber ich brauche es außerhalb des Hauptprogramms, damit ich es überall verwenden kann, zum Beispiel hier verwende ich inFile in WM_CREATE und auch in WM_KEYDOWN und schließe die Datei, wenn das Fenster geschlossen wird.ist es möglich zu tun?
char Map[10][10], c[256];
std::ifstream inFile;
//windProc
case WM_CREATE: {
inFile.open ("Map.txt");
if (!inFile) {
::MessageBox(hwnd, "Failed to open file", "Error", MB_OK);
}
int i,j;
do { //loop for skipping comments
Map[j][i] = inFile.get(); //<---stuck here
if (Map[j][i] ==';') inFile.getline(c, 256);
} while (Map[j][i] ==';');
while (Map[j][i] !=';') { //loop for painting
switch (Map[j][i]) {
//
//paint based on char
//
}
i++;
Map[j][i] = inFile.get();
if (i==10) {j++; i=0;}
}
}
case WM_KEYDOWN: {
//...
inFile.getline(c, 256); // continue reading from file
int j=0; int i=0;
Map[j][i] = inFile.get();
while (Map[j][i] !=';') {
switch (Map[j][i]) {
//
//paint based on char
//
}
i++;
Map[j][i] = inFile.get();
if (i==10) {j++; i=0;}
}
break; }
case WM_DESTROY:
inFile.close();
PostQuitMessage (0);
break;
Lösung
Ihr Problem ist, dass Sie nicht initialisieren i
und j
.Versuchen Sie, sie zu initialisieren 0
.Außerdem möchten Sie sie vermutlich in Ihrer Schleife aktualisieren, damit Sie das Zeichen nicht kontinuierlich im selben Element speichern.
Dann müssen Sie neu initialisieren i
und j
zu 0
vor der Malschleife.Das Malen erfolgt jedoch normalerweise in WM_PAINT
(Ich bin mir nicht einmal sicher, ob es funktionieren wird WM_CREATE
.)
Andere Tipps
Wenn der Dampf in Ihrer while-Schleife in den Fehler- / eof-Status wechselt, Map[j][i]
wird nie eingestellt werden ';'
was zu einer Endlosschleife führt:
do { //loop for skipping comments
Map[j][i] = inFile.get(); //<---stuck here
if (Map[j][i] ==';') inFile.getline(c, 256);
} while (inFile.good() && Map[j][i] ==';');