问题:为什么我能够成功编译我的代码(没有任何警告)但奇怪的是它没有运行而我不知道背后的原因它。我正在解决的问题是使用C创建一个随机Walk,我的代码如下所述 -
这是我一直在努力解决的问题:
我正在编写一个C程序randWalk.c,它可以在10x10数组中生成随机游走。
最初,数组只包含点字符('。')和A [0] [0]中的起始位置。
程序必须从元素到元素随机“行走”,始终向上,向下,向左或向右一步。程序访问的元素将仅按照访问的顺序用字母A到Z标记(到达字母Z后步行停止)。完成步行后,程序将打印最终的数组值,如下例所示:
规则 1.在执行移动之前,请检查:
•它不会超出阵列。
•不会将漫游带到已分配字母的元素(被阻止的元素)。
如果违反任何一个条件,请尝试向另一个方向移动。
- 醇>
如果所有四个方向都被阻止,程序必须终止。
我的解决方案/代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ONE_DOT '.',
#define TWO_DOTS ONE_DOT ONE_DOT
#define FIVE_DOTS TWO_DOTS TWO_DOTS ONE_DOT
#define TEN_DOTS { FIVE_DOTS FIVE_DOTS },
#define TWENTY_DOTS TEN_DOTS TEN_DOTS
#define FIFTY_DOTS TWENTY_DOTS TWENTY_DOTS TEN_DOTS
#define ONE_HUNDRED_DOTS FIFTY_DOTS FIFTY_DOTS
int B[10][10] = {ONE_HUNDRED_DOTS};
char A[26] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
int main()
{
int i = 0;
int j = 0;
int n = 0;
int a, b, c, d;
int check;
while (check != a + b + c + d)
{
srand(time(NULL));
int r = rand() % 4;
switch (r)
{
case 0:
i--;
if (B[i][j] == '.')
{
if (((0 <= i) && (i <= 10))&&((0 <= i) && (i <= 10)))
{
B[i][j] = A[n];
n++;
}
}
else
{
check = a + check;
}
break;
case 1:
j++;
if (B[i][j] == '.')
{
if (((0 <= i) && (i <= 10))&&((0 <= i) && (i <= 10)))
{
B[i][j] = A[n];
n++;
}
}
else
{
check = check + b;
}
break;
case 2:
i++;
if (B[i][j] == '.')
{
if (((0 <= i) && (i <= 10))&&((0 <= i) && (i <= 10)))
{
B[i][j] = A[n];
n++;
}
}
else
{
check = check + c;
}
break;
case 3:
j--;
if (B[i][j] == '.')
{
if (((0 <= i) && (i <= 10))&&((0 <= i) && (i <= 10)))
{
B[i][j] = A[n];
n++;
}
}
else
{
check = check + d;
}
break;
}
int row, columns;
for (int row = 0; row < 10; row++)
{
for (int columns = 0; columns < 10; columns++)
{
printf("%d ", B[row][columns]);
}
printf("\n");
}
}
return 0;
}
答案 0 :(得分:5)
我注意到的第一件事是
int a,b,c,d;
int check;
while(check!=a+b+c+d)
使用未初始化的变量会导致未定义的行为,因此您的代码无效
答案 1 :(得分:-1)
变量check,a,b,c,d都是单元化的,导致垃圾值的比较。可能永远都不会执行while循环。