문제

win32에서 프로그램을 만들고 있는데 프로그램이 .get 함수에서 응답을 멈춥니다. 어떻게 해야 할지 모르겠습니다. 문제는 다음과 같습니다. std::ifstream inFile; 하지만 주 프로그램 외부에서 필요하므로 어디에서나 사용할 수 있습니다. 예를 들어 여기서는 WM_CREATE와 WM_KEYDOWN에서 inFile을 사용하고 창이 닫힐 때 파일을 닫습니다.할 수 있습니까?

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;
도움이 되었습니까?

해결책

문제는 초기화하지 않는다는 것입니다. i 그리고 j.초기화해 보세요. 0.또한 동일한 요소에 문자를 계속해서 저장하지 않도록 루프에서 업데이트하고 싶을 수도 있습니다.

그런 다음 다시 초기화해야합니다 i 그리고 j 에게 0 페인팅 루프 전에.그러나 그림은 일반적으로 다음과 같이 수행됩니다. WM_PAINT (이게 작동할지는 잘 모르겠습니다. WM_CREATE.)

다른 팁

Steam이 While 루프에서 Error / EOF 상태가 EneraCodicetagode가 Map[j][i]로 설정되지 않으면 엔드리스 루프가 발생합니다.

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] ==';');
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top