Question

Je crée un programme sur win32, le programme ne répond plus sur la fonction .get, je ne sais pas quoi faire d'autre, je pense que le problème vient de std::ifstream inFile; mais j'en ai besoin en dehors du programme principal, donc je peux l'utiliser partout, par exemple ici j'utilise inFile dans WM_CREATE et aussi dans WM_KEYDOWN et ferme le fichier lorsque la fenêtre se ferme.est-ce possible de le faire ?

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;
Était-ce utile?

La solution

Votre problème est que vous n'initialisez pas i et j.Essayez de les initialiser à 0.De plus, vous souhaitez probablement les mettre à jour dans votre boucle afin de ne pas stocker continuellement le caractère dans le même élément.

Ensuite, vous devez réinitialiser i et j à 0 avant la boucle de peinture.Cependant, la peinture est généralement réalisée dans WM_PAINT (je ne suis même pas sûr que ça fonctionnera WM_CREATE.)

Autres conseils

Si le steam entre dans l'état error/eof dans votre boucle while, Map[j][i] ne sera jamais réglé sur ';' ce qui donne une boucle sans fin :

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] ==';');
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top