2次元フィールドの移動がうまくいきません(初心者)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
heberoke
記事: 1
登録日時: 9年前

2次元フィールドの移動がうまくいきません(初心者)

#1

投稿記事 by heberoke » 9年前

現在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");

}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 2次元フィールドの移動がうまくいきません(初心者)

#2

投稿記事 by みけCAT » 9年前

ソースコードを提示する際は、BBCodeを有効にした(無効にしない)状態でBBCodeのcodeタグで囲んでいただけると、見やすくてありがたいです。
heberoke さんが書きました:しかし、数回入力すると不具合が起きます。
問題点と改善方法を教えていただきたいです。
座標を更新する所の式が間違っているので、範囲外アクセスを起こして未定義動作になる可能性があります。

lineY = -1; → lineY--;
lineY = +1; → lineY++;
lineX = -1; → lineX--;
lineX = +1; → lineX++;
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
amehirune
記事: 181
登録日時: 11年前
住所: どっか
連絡を取る:

Re: 2次元フィールドの移動がうまくいきません(初心者)

#3

投稿記事 by amehirune » 9年前

オフトピック
おそらく質問主さんは、

コード:

lineY -= 1;
lineX += 1;
という風に描きたかったのを間違えてしまい、
それがVisualStudioの仕様で自動スペースが入ってしまったんでしょうね…
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

閉鎖

“C言語何でも質問掲示板” へ戻る