可行。
/** 攻击僵尸 */ void attackZombie() { for(int k = 0; k < 2; k++) { here: for(int i = 0; i < 9;i++) { if(grassArray[k][i] == BEAN_SHOOTER)//确保一个豌豆射手每1h只攻击一次?? { for(int j = i + 1; j < 10;j++) { if(grassArray[k][j] == COMMON_ZOMBIE) { if(zombieLife[k][j] > 1) { zombieLife[k][j] -= 1; //break; goto here; } else if(zombieLife[k][j] == 1) { sysBaseInfo.commonZombieNum -= 1; sysBaseInfo.diedCommonZombieNum += 1; grassArray[k][j] = NOTHING; zombieLife[k][j] = 3;//重新赋值为初始值 //break; goto here; } } } } //continue; } } }
建议6.3 不要滥用goto语句。
说明:goto语句会破坏程序的结构性,所以除非确实需要,最好不使用goto语句。
可以利用goto语句方面退出多重循环;同一个函数体内部存在大量相同的逻辑但又不方便封装成函数的情况下,譬如反复执行文件操作,对文件操作失败以后的处理部分代码(譬如关闭文件句柄,释放动态申请的内存等等),一般会放在该函数体的最后部分,再需要的地方就goto到那里,这样代码反而变得清晰简洁。