2014-10-26 130 views
-2

這裏是任務:陣列沃克C語言

項目U6:數組沃克 收件,計算跨越10×10陣列的「行走」(一個可愛的機器人的)中的程序。 數組包含字符(全部最初爲'。')。通過輸入字符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; 
} 

我知道,我還沒有接近解決方案,但我想RLY知道如何做到這一點。 我無法理解如何更改'。'寫下一封信,記住所有的職位。

+0

'm = i + 1'在當前位置看起來非常錯誤。你應該使用'i + 1'而不是'm'。 – 2014-10-26 15:39:11

+0

另外,「返回方向」(你向誰回來)有什麼意義? – 2014-10-26 15:40:34

回答

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

我想象左上角有coodinates(0,0)和右下角有座標(-9,-9)的網格。然後,創建一個當directionx時終止的循環。掃描用戶輸入並將其存儲在direction中。然後,檢查它是否是n。如果是,請檢查y是否爲0,如果a[x][y-1]不是.。如果是,則打印出「你不能去那裏」並繼續循環。否則,請執行y--,然後如果ptrZ,ptr=let[x][y-1]=ptr; else,ptr++;然後a[x][y-1]=ptr;。之後繼續循環。

現在,執行上面的想法,當directione,ws時改變各個變量。

+0

非常感謝您的幫助!沒有你的提示,我不會這樣做,先生。 – 2014-10-27 16:36:09

+0

完成您的任務的好工作! :) – 2014-10-27 16:40:33