ファイルon.get関数を読むときにプログラムが立ち往生しています
質問
Win32でプログラムを作成しています、プログラムは.get関数での応答を停止します、私は他の何をすべきかわかりません、私は問題がstd::ifstream inFile;
であると思いますここでは、どこにでも使用できます。たとえば、ここではWM_CREATEでinfileを使用し、WM_KeyDownでもWM_KeyDownでも閉じているときにファイルを閉じます。それはやるのが可能ですか?
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ループ内のSteamがエラー/ EOF状態になった場合、Map[j][i]
はendlessループになるように';'
に設定されません。
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