C 我的随机游走程序编译但不运行
问题:为什么我能够成功编译代码(没有任何警告),但奇怪的是它没有运行,我不知道背后的原因。我要解决的问题是使用C创建一个随机游走,我的代码如下所述-C 我的随机游走程序编译但不运行,c,C,问题:为什么我能够成功编译代码(没有任何警告),但奇怪的是它没有运行,我不知道背后的原因。我要解决的问题是使用C创建一个随机游走,我的代码如下所述- 这就是我一直在研究的问题: 我正在编写一个C程序randWalk.C,它在10x10阵列上生成一个随机游动 最初,数组将只包含点字符('.')和[0][0]中的起始位置 程序必须随机地从一个元素“走”到另一个元素,总是向上、向下、向左或向右走一步。程序访问的元素将按照访问顺序仅标记字母A到Z(到达字母Z后停止行走)。完成漫游后,程序将打印最终数组
这就是我一直在研究的问题: 我正在编写一个C程序randWalk.C,它在10x10阵列上生成一个随机游动 最初,数组将只包含点字符('.')和[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;
}
#包括
#包括
#包括
#定义一个“_点”。”,
#定义两个点一个点一个点
#定义五个点两个点两个点一个点
#定义十点{五点五点},
#定义二十个点十个点十个点
#定义五十点二十点二十点十点
#定义一百个点五十个点五十个点
int B[10][10]={100_点};
字符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;
INTA、b、c、d;
整数检查;
while(检查!=a+b+c+d)
{
srand(时间(空));
int r=rand()%4;
开关(r)
{
案例0:
我--;
如果(B[i][j]=='。)
{
如果((0我注意到的第一件事是
int a,b,c,d;
int check;
while(check!=a+b+c+d)
使用未初始化的变量会导致未定义的行为,因此您的代码无法运行变量check、a、b、c、d都被单位化,导致垃圾值的比较。while循环可能永远不会执行。您是否尝试过通过调试器运行它?它是否进入main()如果是,它在哪里阻塞?为什么您的一个…点#define
s包含{brates}
但其他人不行?我不确定版权声明是怎么回事,但是用户对该网站的贡献被占用了太多的空白…没有足够的缩进。我只是想让你知道,所以你明白在这里发布的内容是什么考虑使用do{}while();相反,尽管a、b、c、d和check似乎没有在其他任何地方初始化anyway@KABoissonneault你能解释一下吗?我只是说,如果你不想在循环开始前初始化a,b,c,d和检查,那么你不应该在循环开始时评估条件,应该在循环结束后评估。但看起来你也不需要为这些变量中的任何一个指定一个适当的值,因此它不会改变@Gopi在20分钟前已经回答过的程序的未定义行为。