bug代码
cpp
void input() {
cin >> direction;
switch (direction) {
case 'w':
newpr--;//行--
break;
case 's':
newpr++;//行++
break;
/*
bug代码
*/
//case 'a':
// newpc--;//列--
/*
解决bug
*/
case 'a':
newpc--;
break;
case 'd':
newpc++;//列++
break;
case 'q':
cout << "你确定退出吗?(Y/N)" << endl;
cin >> direction;//合理利用
if (direction == 'Y') {
gameOver = true;
}
break;
}
}
bug原因分析:
在 input() 函数的 switch 语句中,case 'a' 分支缺少 break 语句,导致逻辑错误:
cpp
case 'a':
newpc--;//列--
case 'd':
newpc++;//列--
break;
当输入 'a' 时,程序会先执行 newpc--(向左移动),但由于没有 break,会继续执行下一个 case 'd' 的 newpc++(向右移动)。两次操作相互抵消,导致 newpc 最终没有变化,表现为无法向左移动。
而输入 'd' 时,虽然能正常执行 newpc++,但用户可能因 'a' 无效而误以为 'd' 也有问题(实际 'd' 逻辑本身可行,但受 'a' 影响整体左右移动异常)。
Bug 解决方案
在 case 'a' 分支末尾添加 break 语句,确保每个分支逻辑独立执行: