on.get 함수에서 파일을 읽을 때 프로그램이 멈췄습니다.
문제
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] ==';');
. 제휴하지 않습니다 StackOverflow