数组walker C语言

时间:2014-10-26 15:19:38

标签: c arrays

这是任务:

  

Project U6:Array Walker   编写一个程序,计算10x10阵列的“步行”(可爱的机器人)。该   数组包含字符(最初都是'。')。用户可以输入四个不同的方向   北,东,南,西,通过输入字符n,e,s,w来控制行走。如果是用户   输入x程序退出。在每个方向命令之后,数组都打印出来   从A到Z开始以大写字母显示。我们用A作为起点,   剩余25个字母表示步骤。用字母Z表示一步后,   我们回首并用A重新开始。为了使步行更有趣,用户就是   不允许重新访问某个位置。在这种情况下,程序不会打印数组,但是   打印“你不能去那里!” - 是的,你可以陷阱自己。   从左上角开始(位置0,0):

这就是我到目前为止所拥有的:

#include <stdio.h>
#include <conio.h>
#define M 26
#define N 10
#define K 10

int main()
{
    char A[N][K],direction;
    char let[26] =     {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    int i=0,j=0,m=0;
    for(i=0; i<N; ++i)
        for(j=0; j<K; ++j)
            A[i][j]='.';
    for(i=0; i<N; ++i)
    {   A[0][0]=let[0];
        for(j=0; j<K; ++j)
            printf("%c",A[i][j]);
            printf("\n");
    }
    getch();

    scanf("%c",&direction);
        for(m=1;m<26;m++){
            if (direction=='E')

            for(i=0; i<N; ++i){       //i don't think that the way that im thinking here is rigth
                 A[0][0]=let[0];
                 m=i+1;
                 A[m][j++]=let[m];
            for(j=0; j<K; ++j)
                printf("%c",A[i][j]);
                printf("\n");}
                return direction;
            }

    return 0;
}

我知道我甚至不接近解决方案,但我真的想知道如何制作它。 我无法理解如何改变&#39;。&#39;在接下来的信中,记住所有这些职位。

2 个答案:

答案 0 :(得分:1)

我不打算给你整个代码,只是给你一些提示和提示。

首先,请致电

A[0][0]=let[0];
main开始时

一次。然后,使用

创建一个名为dispgrid的函数或类似的函数
    for(i=0; i<N; ++i)
    {   
        for(j=0; j<K; ++j)
            printf("%c",A[i][j]);
            printf("\n");
    }

在它的身体里。请记住

 char A[N][K];

应声明为全局,因为其他功能也需要它。您将需要一个指针来迭代字母数组。所以声明

char *ptr=let;

您还需要两个变量来表示机器人的当前x和y坐标。所以声明

int x=0,y=0; //starting at position (0,0)

我想象左上角的网格有坐标(0,0),右下角有坐标(-9,-9)。然后,创建一个在directionx时终止的循环。扫描用户输入并将其存储在direction中。然后,检查它是否为n。如果是,请检查y是否为0,a[x][y-1]是否不是.。如果是,那么打印&#34;你不能去那里&#34;并继续循环。否则,执行y--,然后ptr Zptr=let[x][y-1]=ptr;其他,ptr++;,然后a[x][y-1]=ptr;。之后继续循环。

现在,实现上述想法,在directione ws和{{1}}时需要更改相应的变量。

答案 1 :(得分:0)

我做到了!

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#define M 26
#define N 10
#define K 10

int main()
{
    char A[N][K],direction;
    char let[M] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    char start='A';
    int x=0,y=0;
    int i=0,j=0,m,k;

    for(i=0; i<N; ++i){
        for(j=0; j<K; ++j)
            A[i][j]='.';}

        for(i=0; i<N; ++i){
                A[0][0]=let[0];
            for(j=0; j<K; ++j)
                printf("%c",A[i][j]);
                printf("\n");
                    }

    k=0;
    A[x][y]=let[k];

if (direction == 's' && x==9 || direction=='e' && y==9 || direction=='w' && y==0 || direction=='n' && x==0){
            printf("You cannot go there!\n");}

do{
        if (direction =='x'){break;}

        if (direction!='\n'){
            printf("Enter direction command: ");}
            direction=getchar();

        if (direction=='s' && A[x+1][y]!='.'){
              printf("You cannot go there!\n");

        }else if(direction=='s') {
                x++;
                k++;
                A[x][y]=let[k];
                    for(i=0; i<N; ++i){
                        for(j=0; j<K; ++j)
                            printf("%c",A[i][j]);
                            printf("\n");}
        }

        if (direction=='e' && A[x][y+1]!='.'){
              printf("You cannot go there!\n");

        }else if (direction=='e'){
            y++;
            k++;
            A[x][y]=let[k];
                 for(i=0; i<N; ++i){
                        for(j=0; j<K; ++j)
                            printf("%c",A[i][j]);
                            printf("\n");}
        }

        if (direction=='w' && A[x][y-1]!='.'){
              printf("You cannot go there!\n");

        }else if (direction=='w'){
            y--;
            k++;
            A[x][y]=let[k];
                    for(i=0; i<N; ++i){
                        for(j=0; j<K; ++j)
                            printf("%c",A[i][j]);
                            printf("\n");}

        }

        if (direction=='n' && A[x-1][y]!='.'){
              printf("You cannot go there!\n");

        }else if (direction=='n'){
            x--;
            k++;
            A[x][y]=let[k];
                    for(i=0; i<N; ++i){
                        for(j=0; j<K; ++j)
                            printf("%c",A[i][j]);
                            printf("\n");}
            }
        } while (k!=26);
    }