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
相关产品推荐
相关产品推荐

