我的随机漫步程序编译但不运行

时间:2015-06-12 18:21:33

标签: c

问题:为什么我能够成功编译我的代码(没有任何警告)但奇怪的是它没有运行而我不知道背后的原因它。我正在解决的问题是使用C创建一个随机Walk,我的代码如下所述 -

这是我一直在努力解决的问题:

  

我正在编写一个C程序randWalk.c,它可以在10x10数组中生成随机游走。

     

最初,数组只包含点字符('。')和A [0] [0]中的起始位置。

     

程序必须从元素到元素随机“行走”,始终向上,向下,向左或向右一步。程序访问的元素将仅按照访问的顺序用字母A到Z标记(到达字母Z后步行停止)。完成步行后,程序将打印最终的数组值,如下例所示:

enter image description here

  

规则   1.在执行移动之前,请检查:

     

•它不会超出阵列。

     

•不会将漫游带到已分配字母的元素(被阻止的元素)。

     
      
  1. 如果违反任何一个条件,请尝试向另一个方向移动。

  2.   
  3. 如果所有四个方向都被阻止,程序必须终止。

  4.   

我的解决方案/代码:

#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;
}

2 个答案:

答案 0 :(得分:5)

我注意到的第一件事是

int a,b,c,d;
int check;

while(check!=a+b+c+d)

使用未初始化的变量会导致未定义的行为,因此您的代码无效

答案 1 :(得分:-1)

变量check,a,b,c,d都是单元化的,导致垃圾值的比较。可能永远都不会执行while循环。