程序在读取文件时卡住.得到的功能
program stuck when reading file on.get function
我正在win32上创建一个程序,程序停止响应。get函数,我不知道该怎么办,我认为问题是std::ifstream inFile;
,但我需要它在主程序之外,所以我可以在任何地方使用它,例如这里我在WM_CREATE中使用inFile,也在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;
如果蒸汽在while循环中进入error/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] ==';');
您的问题是您没有初始化i
和j
。尝试将它们初始化为0
。而且,您可能希望在循环中更新它们,这样您就不会连续地将字符存储在同一元素中。
那么你需要在绘制循环之前将i
和j
重新初始化为0
。然而,绘画通常是在WM_PAINT
完成的(我甚至不确定它会在WM_CREATE
工作)
相关文章:
- C++读取功能改进,使读取多个文件
- 如何继续读取不同功能中的文件,而不是从头开始再次读取文件?
- 读取、写入和as_bytes功能
- C++从键盘读取整数的功能
- 如何使用 recv 或 C++ 中的读取功能从 tcp 套接字读取大请求
- 此读取功能有什么问题
- 功能"fread()"不读取特定文件类型?
- 从文件到字符串读取并传递到功能
- 功能.exe:0xc0000005:访问违规读取地点0x0000000000000000
- 使用运算符读取文件和使用读取功能>>文件有什么区别?
- 是否可以处理超时的阻塞读取功能?
- 串口读取功能的通信超时和线程不超时
- C 功能:读取直到文件结束 - 查找代码中的错误
- 解析一般CSV读取功能时,如何处理不同的数据类型?(不明确指定它们)
- C 功能具有3个参数,可在通用二进制输入中读取
- C 中的空白功能未读取
- 当类层次结构中只有一个类时,请避免在每个功能呼叫上读取V-Table的开销
- C 从文件功能读取循环时无法退出
- 使用linux功能读取块的不连续运行
- FFMPEG自定义读取功能读取所有数据