You need to enable JavaScript to run this app. C++入门课程NIM游戏项目代码无法运行求助
优惠活动
大模型
产品
解决方案
定价
更多

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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 09:45:08