Turtle Graphics程序。为什么不起作用?

时间:2018-08-27 11:32:06

标签: c turtle-graphics

我正在尝试进行此处的练习(第246页,第6.23页)http://index-of.es/C++/C%20How%20to%20Program.pdf。我的代码打印了一个12x12的正方形,但是我的代码打印了一个25x25的正方形,但左侧的一半乘以1,而另一半乘以0。为什么?

#include <stdio.h>
#include <stdlib.h>
#define SIZE 50

int main(){
    int lifted=1, floor[50][50]={0}, commands[7]={1,2,3,4,5,6,9}, spaces, command, north=1, south=0, east=0, west=0, row=25, column=25, i, max=1;


    while(command!=9){
        printf("Enter a command: ");
        scanf("%d",&command);
        switch(command){
            case 1:
                lifted=1;
                break;
            case 2: 
                lifted=0;
                break;
            case 3:
                if(north==1){
                    north=0;
                    east=1;
                }else if(south==1){
                    south=0;
                    west=1;
                }else if(west==1){
                    north=1;
                    west=0;
                }else if(east==1){
                    south=1;
                    east=0;
                }
                break;
            case 4:
                if(north==1){
                    north=0;
                    west=1;
                }else if(south==1){
                    south=0;
                    east=1;
                }else if(west==1){
                    west=0;
                    south=1;
                }else if(east==1){
                    north=1;
                    east=0;
                }
                break;
            case 5:
                printf("Enter a number of spaces: ");
                scanf("%d",&spaces);
                max=spaces;
                break;
            case 6:
                for(i=0; i<50; i++){
                    for(int j=0; j<50; j++){
                        printf("%d ",floor[i][j]);
                    }
                    printf("\n");
                }
                break;
            case 9:
                exit(0);

        }
        if(lifted==0){
            for(i=0; i<max; i++){
                if(north==1){
                    row--;
                }else if(south==1){
                    row++;
                }else if(east==1){
                    column++;
                }else if(west==1){
                    column--;
                }
                floor[row][column]=1;
            }
        }
    }

    return 0;

}

输出未绘制12x12正方形。为什么?请帮我。基本上我不知道该怎么办。有人可以找到错误吗?我已经进行了一天以上的练习。谢谢。

1 个答案:

答案 0 :(得分:0)

输出不会输出12x12的正方形,因为以下代码将打印50行,每行50个数字。

            for(i=0; i<50; i++){
                for(int j=0; j<50; j++){
                    printf("%d ",floor[i][j]);
                }
                printf("\n");
            }

您在原始问题中描述的输出明显损坏的原因可能与以下代码有关:

    if(lifted==0){
        for(i=0; i<max; i++){
            if(north==1){
                row--;
            }else if(south==1){
                row++;
            }else if(east==1){
                column++;
            }else if(west==1){
                column--;
            }
            floor[row][column]=1;
        }
    }

这正在执行未经检查的数组访问,这可能导致未定义的行为,包括覆盖不应由该代码写入的内存。那可以解释各种奇怪的结果。 为了防止这种情况,您需要添加四项检查,每项检查50x50网格的边缘。例如:

if(north==1){
    if(--row < 0){
        row = 0;
    }
}else if(south==1) ...