プログラムはインデックス[0] [1]で開始し、インデックス[7] [7]に到達すると迷路を完了します。プログラムが "FindPath"関数に到達すると、プログラムがクラッシュします。私が間違っていることを考えることはできません。どんな情報も役立ちます。私はXの空白と空白を再帰的に解決するプログラムをC言語で書く必要があります。
#include "Header.h"
int main(void) {
int x = 0, y = 1;
char maze[8][8] = {
{' ', ' ', 'x', 'x', 'x', 'x', 'x', 'x'},
{' ', 'x', 'x', 'x', 'x', 'x', 'x', 'x'},
{' ', 'x', 'x', 'x', 'x', 'x', 'x', 'x'},
{' ', ' ', ' ', ' ', ' ', 'x', 'x', 'x'},
{'x', 'x', 'x', 'x', ' ', 'x', 'x', 'x'},
{'x', 'x', 'x', 'x', ' ', ' ', ' ', ' '},
{'x', 'x', 'x', 'x', 'x', 'x', 'x', ' '},
{'x', 'x', 'x', 'x', 'x', 'x', 'x', ' '},
};
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
printf("%c ",maze[i][j]);
}
printf("\n");
}
FindPath(maze, x, y);
return 0;
}
#include "Header.h"
void FindPath(char maze[8][8], int x, int y) {
if (x == 7 & y == 7) {
printf("Maze complete");
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
printf("%c ", maze[i][j]);
}
printf("\n");
}
return;
}
else {
if (maze[x + 1][y] = ' ') {
maze[x][y] = 'h';
FindPath(maze, x + 1, y);
return;
}
else if (maze[x - 1][y] = ' ') {
maze[x][y] = 'h';
FindPath(maze, x - 1, y);
return;
}
else if (maze[x][y + 1] = ' ') {
maze[x][y] = 'h';
FindPath(maze, x, y + 1);
return;
}
else if (maze[x][y - 1] = ' ') {
maze[x][y] = 'h';
FindPath(maze, x, y - 1);
return;
}
else {
printf("no path found");
return;
}
}
}
'場合(迷路[X + 1] [Y] = '「)' - あなたが意味するものではありませんでしたかなり確信**割り当て**を実行します。 '=='演算子は等価比較のためのものです。あなたのコードの他の場所でも繰り返されます。だから、 "私が間違ってやっていること"のトップレベルは、賢明な警告を有効にしてコンパイルするのではなく、検査の際にそれらを修正することになります。 – WhozCraig
私の推測では、スタックオーバーフローが発生しています。デバッガでプログラムをステップ実行し、どこに行くのかを確認します。 – Barmar
@WhozCraigが正しいです。 1つの一般的なプラクティスは、==の代わりに=を使用すると、コンパイラが問題をキャッチするように、==の左側に定数を指定して条件を記述することです。つまり、if( '' = maze [x + 1] [y]) ' – bruceg