为什么我的if(flag==4)break;放在下面这个位置不行?
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
char ch[10][10], zimu[26] = { 'A' };
int fang_xiang1, row=0, column=0,flag=0,n=0;
bool fang_xiang2[4] = { false };
srand((unsigned)time(NULL));
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
ch[i][j] = '.';
for (int i = 1; i < 26; i++)
zimu[i] = zimu[i - 1] + 1;
ch[0][0] = 'A';
while (n!=25) {
fang_xiang1 = rand() % 4;
if (fang_xiang2[fang_xiang1] == true)
continue;
fang_xiang2[fang_xiang1] = true;
switch (fang_xiang1) {
case 0:
row += 1;
break;
case 1:
row -= 1;
break;
case 2:
column += 1;
break;
case 3:
column -= 1;
break;
}
if (flag == 4)
break;
if (row < 0 || row>9 || column < 0 || column>9 || ch[row][column] != '.') {
switch (fang_xiang1) {
case 0:
row -= 1;
break;
case 1:
row += 1;
break;
case 2:
column -= 1;
break;
case 3:
column += 1;
break;
}
flag += 1;
continue;
}
ch[row][column] =zimu[n]+ 1;
n += 1;
for (int i = 0; i < 4; i++)
fang_xiang2[i] = false;
flag = 0;
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
printf("%c ", ch[i][j]);
}
printf("\n");
}
return 0;
}
放在这个位置却可以起作用
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
char ch[10][10], zimu[26] = { 'A' };
int fang_xiang1, row=0, column=0,flag=0,n=0;
bool fang_xiang2[4] = { false };
srand((unsigned)time(NULL));
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
ch[i][j] = '.';
for (int i = 1; i < 26; i++)
zimu[i] = zimu[i - 1] + 1;
ch[0][0] = 'A';
while (n!=25) {
if (flag == 4)
break;
fang_xiang1 = rand() % 4;
if (fang_xiang2[fang_xiang1] == true)
continue;
fang_xiang2[fang_xiang1] = true;
switch (fang_xiang1) {
case 0:
row += 1;
break;
case 1:
row -= 1;
break;
case 2:
column += 1;
break;
case 3:
column -= 1;
break;
}
if (row < 0 || row>9 || column < 0 || column>9 || ch[row][column] != '.') {
switch (fang_xiang1) {
case 0:
row -= 1;
break;
case 1:
row += 1;
break;
case 2:
column -= 1;
break;
case 3:
column += 1;
break;
}
flag += 1;
continue;
}
ch[row][column] =zimu[n]+ 1;
n += 1;
for (int i = 0; i < 4; i++)
fang_xiang2[i] = false;
flag = 0;
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
printf("%c ", ch[i][j]);
}
printf("\n");
}
return 0;
}
有什么不同吗?
while (n!=25) {
fang_xiang1 = rand() % 4;
//如果当前if满足条件,则结束当前循环,执行下一次循环。如果if不满足,则往下执行,执行到switch时,肯定会满足某一种情况,导致执行了break,结束了循环。
if (fang_xiang2[fang_xiang1] == true)
continue;
fang_xiang2[fang_xiang1] = true;
switch (fang_xiang1) {
case 0:
row += 1;
break;
case 1:
row -= 1;
break;
case 2:
column += 1;
break;
case 3:
column -= 1;
break;
}
if (flag == 4)
break;
if (row < 0 || row>9 || column < 0 || column>9 || ch[row][column] != '.') {
switch (fang_xiang1) {
case 0:
row -= 1;
break;
case 1:
row += 1;
break;
case 2:
column -= 1;
break;
case 3:
column += 1;
break;
}
flag += 1;
continue;
}
ch[row][column] =zimu[n]+ 1;
n += 1;
for (int i = 0; i < 4; i++)
fang_xiang2[i] = false;
flag = 0;
}
//如果当前if满足条件,则结束当前循环,执行下一次循环。如果if不满足,则往下执行,执行到switch时,肯定会满足某一种情况,导致执行了break,结束了循环。
if (fang_xiang2[fang_xiang1] == true)
continue;
不起作用是因为,如果满足这个if条件的话,则执行下一次循环。(不会往下执行)
因为上面的flag=0,进入不了,无法改变值。
countinue的意思是继续这个循环,而不是继续下面的程序
区别就时当flag==4以后,第一种写法要多执行while到if(flag ==4)之间的代码才结束循环;第二种写法少执行这些大妈就结束循环。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632