現在VisualStudioでプログラムを書いているのですがうまくいきません。
8を入力すると上に移動し、2を入力すると下に移動、6を入力すると右、4を入力すると左に移動し、左上からスタートして右下にたどり着くとゴールというものです。
しかし、数回入力すると不具合が起きます。
問題点と改善方法を教えていただきたいです。
プログラムは以下のようなものです。
プログラム初心者ですがよろしくお願いします。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void ShowMap(int map[8][10]);
int main(void)
{
int map[8][10] = {0}, inputNUM, lineY = 0, lineX = 0;
map[lineY][lineX] = 1;
while (1)
{
system("cls");
ShowMap(map);
scanf("%d", &inputNUM);//方向を入力
if (inputNUM == 8 && lineY != 0)//上方向に移動する場合
{
map[lineY - 1][lineX] = map[lineY][lineX];
map[lineY][lineX] = 0;
lineY = -1;
}
else if (inputNUM == 2 && lineY != 7)//下方向に移動する場合
{
map[lineY + 1][lineX] = map[lineY][lineX];
map[lineY][lineX] = 0;
lineY = +1;
}
else if (inputNUM == 4 && lineX != 0)//左方向に移動する場合
{
map[lineY][lineX - 1] = map[lineY][lineX];
map[lineY][lineX] = 0;
lineX = -1;
}
else if (inputNUM == 6 && lineX != 9)//右方向に移動する場合
{
map[lineY][lineX + 1] = map[lineY][lineX];
map[lineY][lineX] = 0;
lineX = +1;
}
else if (map[7][9] == 1)//ゴールにたどり着いた場合
{
break;
}
}
return 0;
}
void ShowMap(int map[][10])
{
int i, j;
printf(" ↓スタート\n");
printf("┃ ┣━┳━┳━┳━┳━┳━┳━┳━┳━┓\n");
for (j = 0; j<8; j++)
{
printf("┃");
for (i = 0; i<10; i++)
{
if (map[j] == 1)//座標の値が1だった場合
{
printf("○");
}
else if(map[j] == 0)//座標の値が0だった場合
{
printf(" ");
}
if (i<8)
{
printf(" ");
}
}
printf(" ┃\n");
if (j < 7)
{
printf("┣ ╋ ╋ ╋ ╋ ╋ ╋ ╋ ╋ ╋ ┫\n");
}
}
printf("┗━┻━┻━┻━┻━┻━┻━┻━┻━┫ ┃\n");
printf(" ↑ゴール\n");
printf(" 8\n");
printf(" ↑\n");
printf("4← →6\n");
printf(" ↓\n");
printf(" 2\n");
}
2次元フィールドの移動がうまくいきません(初心者)
Re: 2次元フィールドの移動がうまくいきません(初心者)
ソースコードを提示する際は、BBCodeを有効にした(無効にしない)状態でBBCodeのcodeタグで囲んでいただけると、見やすくてありがたいです。
lineY = -1; → lineY--;
lineY = +1; → lineY++;
lineX = -1; → lineX--;
lineX = +1; → lineX++;
座標を更新する所の式が間違っているので、範囲外アクセスを起こして未定義動作になる可能性があります。heberoke さんが書きました:しかし、数回入力すると不具合が起きます。
問題点と改善方法を教えていただきたいです。
lineY = -1; → lineY--;
lineY = +1; → lineY++;
lineX = -1; → lineX--;
lineX = +1; → lineX++;
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 2次元フィールドの移動がうまくいきません(初心者)
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※