C++入门课程NIM游戏项目代码无法运行求助
C++ NIM游戏项目运行问题排查
我正在完成C++入门课程的NIM游戏实现项目,写完代码后本以为能顺利运行,结果碰到了运行错误。我知道整体代码篇幅不算短,目前始终定位不到导致程序无法正常运行的问题。我刚接触编程领域,如果疏漏属于非常基础的问题还请大家谅解,提前感谢各位的帮助。
我配套提供了对应错误提示的截图供参考。
以下是我的完整代码:
#include <iostream> #include <iomanip> using namespace std; int stonesNum; char goFirst; int turn = 0; // 0 = 玩家回合,1 = 电脑回合 int stonesRemove; int main() { do { cout << "请输入初始石子总数:" << endl; cin >> stonesNum; cout << "你想要先手吗?(y/n)" << endl; cin >> goFirst; if (goFirst == 'y' || goFirst == 'Y') { turn = 0; } else { turn = 1; } while (stonesNum > 0) { if (turn == 0) { cout << "你想要移除多少石子?可选1或2个" << endl; cin >> stonesRemove; stonesNum = stonesNum - 1; cout << "剩余石子数量为:" << stonesNum << endl; } else { if (stonesNum % 3 == 0) { stonesNum = stonesNum - 2; cout << "电脑移除了2个石子" << endl; cout << "剩余石子数量为:" << stonesNum << endl; } else { stonesNum = stonesNum - 1; cout << "电脑移除了1个石子" << endl; cout << "剩余石子数量为:" << stonesNum << endl; } } if (stonesNum == 0) { if (turn == 0) { cout << "电脑获胜!" << endl; } else { cout << "你获胜了!" << endl; } } } } return 0; }
问题定位
程序没法运行是几处基础疏漏叠加导致的:
- 最外层的
do循环不符合C++语法规范:你写了do块的起始标记和对应闭合大括号,但没有补上do-while结构强制要求的循环判断条件,编译器解析到这一步会直接报语法错误,根本生成不了可执行程序,自然没法运行。 - 玩家输入完全没有参与计算:你弹出提示让玩家输入要移除的1或2个石子,但代码里根本没用到存输入值的
stonesRemove变量,反而固定写死只减1个石子,就算把语法问题修好,游戏逻辑也和课程要求对不上。 - 没有写回合切换的代码:内层循环里,不管玩家还是电脑走完一步,都没有修改
turn变量把操作权交给对方,会一直卡在同一个人的回合里死循环,根本实现不了轮流操作的效果。 - 整体流程缺漏:你原本设计的最外层do循环是用来实现“游戏结束后重新开一局”的功能,但因为没补循环条件,这部分逻辑完全走不通。
最小修改参考
只要补几处关键代码就能跑通基础逻辑:
- 补全最外层do循环的结尾判断,在游戏结束后提示玩家是否要开启新对局,把判断结果作为循环是否继续的条件。
- 把玩家回合里写死的
stonesNum = stonesNum - 1改成stonesNum = stonesNum - stonesRemove,让玩家的输入真正生效。 - 每走一步只要石子数还没到0,就交换
turn的值,实现轮流操作:// 每步操作完成后,没到终局就切换回合 if (stonesNum > 0) { turn = 1 - turn; }
内容的提问来源于stack exchange,提问作者fanzi_
相关产品推荐
相关产品推荐

