润状闪电 2021-05-15 14:56 采纳率: 100%
浏览 42
已采纳

c语言现代方法第八章编程题9

 

为什么我的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;
}

有什么不同吗?

  • 写回答

6条回答 默认 最新

  • CSDN专家-sinJack 2021-05-15 15:13
    关注
    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,结束了循环。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大