You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++三局两胜骰子游戏循环仅能重启一次后直接退出是什么原因

问题原因

  • 重启时未清空胜场计数:第一次游戏结束后pWin或cWin已经达到2,执行goto restart回到标签位后,while循环的判断条件(pWin != 2) && (cWin != 2)直接不成立,循环不会运行,程序直接退出。
  • 胜负判定逻辑错误:你将整局游戏结束的判定放在了每小局结束的位置,只要某一方胜场暂时领先就会直接判定整局结束,完全不符合三局两胜的设计,比如第一局玩家1:0领先就会直接触发是否继续游玩的询问,不会继续打后续的局。

修正方案

你可以直接把胜场重置逻辑加在restart标签后,同时把整局胜负判定移到while循环外面,修改后代码示例如下:

char Y;
int pWin, cWin, pDice1, cDice1;
restart:
// 每次重启先重置胜场计数
pWin = 0;
cWin = 0;

while ((pWin != 2) && (cWin != 2))
{
    pDice1 = rand() % 6 + 1;
    cDice1 = rand() % 6 + 1;

    cout << "Player score is: " << pDice1 << endl;
    cout << "Computer score is: " << cDice1 << endl;

    if (cDice1 > pDice1) {
        cout << "Computer wins this turn!" << endl << endl;
        cWin++;
    } else if (pDice1 > cDice1) {
        cout << "Player wins this turn!" << endl << endl;
        pWin++;
    } else {
        cout << "It's a draw!" << endl << endl;
    }
}
// 循环结束后才判定整局胜负
if (pWin == 2) {
    cout << "Player wins this round! Do you wish to keep playing?" << endl;
} else {
    cout << "Computer wins this round! Do you wish to keep playing?" << endl;
}
cin >> Y;
if (Y == 'y') {
    goto restart;
} else {
    exit(0);
}

更推荐你用外层循环替代goto语法,代码可读性会更高。

内容的提问来源于stack exchange,提问作者xtremesnus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:36:03