[英]Can't exit while loop
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i=0,j=0,direction=0,k=0,l=0,ix=0,jx=0,mov0=1,mov1=1,mov2=1,mov3=1;
char cl='B';
printf("Enter the size of the maze: ");
scanf("%d %d",&i,&j);
char maze[i][j];
for(l=0;l<j;l++)
{
for(k=0;k<i;k++)
{
maze[k][l]='.';
}
}
i=0;
j=0;
maze[i][j]='A';
//maze[0][0]='A';
srand(time(NULL));
//starts moving through maze
/*for(jx=0;jx<l;jx++)
{
for(ix=0;ix<k;ix++)
{
printf("[%c]",maze[ix][jx]);
}
printf("\n");
}*/
while ((mov0!=1 && mov1!=1 && mov2!=1 && mov3!=1) || (cl!='Z'+1 ) )
{
/*//reset space(positions above 1)
spaces=1;*/
//generates direction
direction=rand()%4;
printf("%c %d\n",cl,direction);
/*for(jx=0;jx<l;jx++)
{
for(ix=0;ix<k;ix++)
{
printf("[%c]",maze[ix][jx]);
}
printf("\n");
}*/
switch(direction)
{
//up
case 0: if((j-1)>0 && maze[i][j-1]=='.' && mov0==1)
{
maze[i][j-1]=cl;
cl++;
j--;
} else {
mov0=0;
break;
}
break;
//down
case 1: if((j+1)<l && (maze[i][j+1]=='.' && mov1==1))
{
maze[i][j+1]=cl;
cl++;
j++;
} else {
mov1=0;
break;
}
break;
//left
case 2: if((i-1)>0 && (maze[i-1][j]=='.' && mov2==1))
{
maze[i-1][j]=cl;
cl++;
i--;
} else {
mov2=0;
break;
}
break;
//right
case 3: if((i+1)<k && (maze[i+1][j]=='.' && mov3==1))
{
maze[i+1][j]=cl;
cl++;
i++;
} else {
mov3=0;
break;
}
break;
}
}
for(j=0;j<l;j++)
{
for(i=0;i<k;i++)
{
printf("[%c]",maze[i][j]);
}
printf("\n");
}
return 0;
}
該代碼應該遍歷數組,並用字母表中的字母填充到達的每個點,如果沒有可用的點,則必須退出並按原樣打印數組。 (不能兩次進入同一單元格)。
編輯#2:
我也嘗試過這種方式:
switch(direction)
{
//up
case 0: if((j-1)>0 && maze[i][j-1]=='.')
{
maze[i][j-1]=cl;
cl++;
j--;
} else if((maze[i+1][j]!='.') && (maze[i-1][j]!='.') && (maze[i][j-1]!='.') && (maze[i][j+1]!='.')){
flag=0;
break;
}
break;
//down
case 1: if((j+1)<l && (maze[i][j+1]=='.'))
{
maze[i][j+1]=cl;
cl++;
j++;
} else if((maze[i+1][j]!='.') && (maze[i-1][j]!='.') && (maze[i][j-1]!='.') && (maze[i][j+1]!='.')){
flag=0;
break;
}
break;
//left
case 2: if((i-1)>0 && (maze[i-1][j]=='.'))
{
maze[i-1][j]=cl;
cl++;
i--;
} else if((maze[i+1][j]!='.') && (maze[i-1][j]!='.') && (maze[i][j-1]!='.') && (maze[i][j+1]!='.')){
flag=0;
break;
}
break;
//right
case 3: if((i+1)<k && (maze[i+1][j]=='.'))
{
maze[i+1][j]=cl;
cl++;
i++;
} else if((maze[i+1][j]!='.') && (maze[i-1][j]!='.') && (maze[i][j-1]!='.') && (maze[i][j+1]!='.')){
flag=0;
break;
}
break;
}
}
標志變量將替換所有4個mov#變量。 仍然沒有退出while循環。
編輯#3修復了@SomeProgrammerDude指出的問題。 仍然沒有退出。
while ((mov0!=1 && mov1!=1 && mov2!=1 && mov3!=1) || (cl!='Z'+1 ) )
應該
while ((mov0!=1 && mov1!=1 && mov2!=1 && mov3!=1) && (cl!='Z'+1 ) )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.