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;
War es hilfreich?

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] ==';');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top