Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我的随机游走程序编译但不运行_C - Fatal编程技术网

C 我的随机游走程序编译但不运行

C 我的随机游走程序编译但不运行,c,C,问题:为什么我能够成功编译代码(没有任何警告),但奇怪的是它没有运行,我不知道背后的原因。我要解决的问题是使用C创建一个随机游走,我的代码如下所述- 这就是我一直在研究的问题: 我正在编写一个C程序randWalk.C,它在10x10阵列上生成一个随机游动 最初,数组将只包含点字符('.')和[0][0]中的起始位置 程序必须随机地从一个元素“走”到另一个元素,总是向上、向下、向左或向右走一步。程序访问的元素将按照访问顺序仅标记字母A到Z(到达字母Z后停止行走)。完成漫游后,程序将打印最终数组

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


这就是我一直在研究的问题:

我正在编写一个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分钟前已经回答过的程序的未定义行为。