Pergunta

Eu estou criando um programa do win32, o programa pára de responder .obter funcionar, eu não sei o que fazer mais, eu acho que o problema é com std::ifstream inFile; mas eu preciso dele fora do programa principal, para que eu possa usá-lo em todos os lugares, por exemplo, aqui eu uso inFile em WM_CREATE e também em WM_KEYDOWN e feche o arquivo quando fecha a janela.é possível fazer?

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;
Foi útil?

Solução

O seu problema é que você não está inicializando i e j.Tente inicializar-los para 0.Além disso, você provavelmente deseja atualizá-los no seu ciclo, para que você não se continuamente a loja que o personagem do mesmo elemento.

Em seguida, você precisará reinicializar i e j para 0 antes que a pintura loop.No entanto, a pintura é feita geralmente em WM_PAINT (Eu nem tenho certeza de que ele vai trabalhar em WM_CREATE.)

Outras dicas

Se o vapor entra erro/eof estado em seu loop while, Map[j][i] não vai ser definida para ';' resultando em um loop infinito:

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] ==';');
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top