题
我正在win32上创建一个程序,程序停止响应。获取函数,不知道还有什么办法,我想问题出在 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
.)
其他提示
如果蒸汽在while循环中输入错误/ eof状态,则不会设置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