請問有人可以幫我看看code哪裡出了錯嗎?

學校最近的程式作業小弟已經知道概念,但是寫出來給電腦跑都會出錯~

可以請各位替小弟看看哪裡該修正嗎,拜託了~

題目如下
請問有人可以幫我看看code哪裡出了錯嗎?
請問有人可以幫我看看code哪裡出了錯嗎?

小弟的code:


#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void)
{
int dir;
int i=0;
int j=0;
int p=0;
int q=0;
char m ='B';
char rw[10][10];

for(p=0;p<=9;p++)
{
for(q=0;q<=9;q++)
{
if(p==0&&q==0)
rw[p][q]='A';
else
rw[p][q]='.';
}
}

srand(time(0));
for(m='B';m<='Z';m++)
{
dir=(rand()%4)+1;

if(i==0&&j==0)
while(
(dir==1)||
(dir==4)||
((dir==2)&&(rw[i][j+1]!='.'))||
((dir==3)&&(rw[i+1][j]!='.'))
)
dir=(rand()%4)+1;

else if(i==0&&j==9)
while(
(dir==1)||
(dir==2)||
((dir==3)&&(rw[i+1][j]!='.'))||
((dir==4)&&(rw[i][j-1]!='.'))
)
dir=(rand()%4)+1;

else if(i==9&&j==9)
while(
(dir==2)||
(dir==3)||
((dir==1)&&(rw[i-1][j]!='.'))||
((dir==4)&&(rw[i][j-1]!='.'))
)
dir=(rand()%4)+1;

else if(i==9&&j==0)
while(
(dir==3)||
(dir==4)||
((dir==2)&&(rw[i][j+1]!='.'))||
((dir==1)&&(rw[i-1][j]!='.'))
)
dir=(rand()%4)+1;

else if(i==0&&j!=0&&j!=9)
while(
(dir==1)||
(dir==3&&rw[i+1][j]!='.')||
((dir==2)&&(rw[i][j+1]!='.'))||
((dir==4)&&(rw[i][j-1]!='.'))
)
dir=(rand()%4)+1;

else if(j=0&&i!=0&&i!=9)
while(
(dir==4)||
((dir==2)&&(rw[i][j+1]!='.'))||
((dir==3)&&(rw[i+1][j]!='.'))||
((dir==1)&&(rw[i-1][j]!='.'))
)
dir=(rand()%4)+1;

else if(i==9&&j!=0&&j!=9)
while(
(dir==3)||
((dir==2)&&(rw[i][j+1]!='.'))||
((dir==1)&&(rw[i-1][j]!='.'))||
((dir==4)&&(rw[i][j-1]!='.'))
)
dir=(rand()%4)+1;

else if(j==9&&i!=0&&i!=9)
while(
(dir==2)||
((dir==3)&&(rw[i+1][j]!='.'))||
((dir==1)&&(rw[i-1][j]!='.'))||
((dir==4)&&(rw[i][j-1]!='.'))
)
dir=(rand()%4)+1;

else if(1<=i&&1<=j&&i<=8&&j<=8)
while(
((dir==1)&&(rw[i-1][j]!='.'))||
((dir==2)&&(rw[i][j+1]!='.'))||
((dir==3)&&(rw[i+1][j]!='.'))||
((dir==4)&&(rw[i][j-1]!='.'))
)
dir=(rand()%4)+1;

if(dir==1) {
i=i-1;
rw[i][j]=m;
}
else if(dir==2) {
j=j+1;
rw[i][j]=m;
}
else if(dir==3) {
i=i+1;
rw[i][j]=m;
}
else if(dir==4) {
j=j-1;
rw[i][j]=m;
}


}

for(p=0;p<=9;p++)
{
for(q=0;q<=9;q++)
{
printf("%c ",rw[p][q]);
}

printf("\n");
}

printf("\n");
system("pause");
return 0;
}
2011-11-17 18:04 發佈
文章關鍵字 code
概念是對,但有兩個問題

第一個很嚴重,你沒有檢查死路
你用 while 迴圈在檢查到某個方向不能走時,會重新指定另一個方向
但是當四個方向都不能走時,你的程式就卡死在迴圈裡了
以左上角為例,在檢查方向之前,必須先檢查目前位置是否已是死路,是的話就得直接 break 出去了
if(i==0&&j==0){
 if( rw[0][1]!='.'&&rw[1][0]!='.' ){
  break;
 }
 while(
  (dir==1)||
  (dir==4)||
  ((dir==2)&&(rw[i][j+1]!='.'))||
  ((dir==3)&&(rw[i+1][j]!='.'))
 )
 dir=(rand()%4)+1;
}

第二個是上方邊界的判斷式 else if(j=0&&i!=0&&i!=9)
其中 j==0 你打成 j=0,比較動作變成了賦值,於是就會有字母跑錯地方了
巨乳は夢が詰まってるから大きい、貧乳はみんなに夢を与えているから小さいんだ!

kaworucloud wrote:
概念是對,但有兩個問...(恕刪)


太感謝大大了!!!!

小弟找了好久都沒發現那一個被遺漏的"=",compiler 也不會認為有錯~

心裡還一直以為是判斷不要重疊跟撞牆的條件設錯。

卡了兩三天終於能夠完成的感覺真是興奮極了!!!

大大謝謝您的好眼力
會寫程式的男人好帥........

年紀大了學程式有點慢(藉口)
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?