You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C++程序执行无响应且CodeBlocks启动异常问题求助

问题分析与解决方案

一、程序无响应的核心原因:无限死循环

你的代码里存在致命的无限死循环,这直接导致.exe执行时卡死,甚至牵连CodeBlocks进程异常:

看代码最后一段的外层循环:

do {
    // 电脑掷骰子逻辑...
} while (true); // 这里没有任何终止条件,会永远重复执行!

这个外层do while(true)没有退出逻辑,电脑会不断重复掷骰子、输出结果,程序永远停不下来,直接导致卡死。

另外还有两个小问题:

  • 未处理用户输入小写y/n的情况,比如输入y会直接跳出循环,但逻辑上应该视为同意保留
  • 第一个大循环里的break会直接终止游戏,无法实现“再玩一次”的功能

二、修复后的完整代码

我帮你修正了死循环、输入大小写兼容问题,完善了“再玩一次”的逻辑:

#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <cctype> // 用于处理输入大小写转换
using namespace std;

int main() {
    srand(time(0));
    int Roll1, Roll2, UserRoll, Roll3, Roll4, ComputerRoll;
    char Hold;
    char PlayAgain;

    do {
        // 用户掷骰子流程
        Roll1 = 1 + (rand() % 6);
        Roll2 = 1 + (rand() % 6);
        UserRoll = Roll1 + Roll2;

        do {
            cout << "Beat the computer!" << endl;
            cout << endl;
            cout << "You rolled a " << Roll1 << " and a " << Roll2 << "(total= " << UserRoll << ")" << endl;
            cout << endl;
            cout << "Do you want to keep those? (Y/N): ";
            cin >> Hold;
            Hold = toupper(Hold); // 转成大写,兼容小写输入

            if (Hold == 'N') {
                cout << "Rolling again! " << endl;
                // 重新掷骰子
                Roll1 = 1 + (rand() % 6);
                Roll2 = 1 + (rand() % 6);
                UserRoll = Roll1 + Roll2;
            }
        } while (Hold == 'N');

        if (Hold == 'Y') {
            cout << "You chose to keep your numbers. Your total is: " << UserRoll << endl;
        }

        // 电脑掷骰子流程(修复死循环)
        Roll3 = 1 + (rand() % 6);
        Roll4 = 1 + (rand() % 6);
        ComputerRoll = Roll3 + Roll4;

        cout << endl;
        cout << "The computer rolled a " << Roll3 << " and a " << Roll4 << endl;
        cout << endl;
        cout << "(total= " << ComputerRoll << ")" << endl;

        if (ComputerRoll < UserRoll) {
            cout << "Congratulations, you win! " << endl;
        } else if (ComputerRoll > UserRoll) {
            cout << "Sorry, you lose. " << endl;
        } else {
            cout << "You tied. " << endl;
        }

        // 询问是否再玩一次
        cout << endl << "Do you want to play again? (Y/N): ";
        cin >> PlayAgain;
        PlayAgain = toupper(PlayAgain);

    } while (PlayAgain == 'Y'); // 只有用户输入Y才重新启动游戏

    cout << "Thanks for playing!" << endl;
    return 0;
}

三、CodeBlocks恢复方法

程序卡死导致CodeBlocks进程残留,进而启动异常,按以下步骤修复:

  • 打开任务管理器(Ctrl+Shift+Esc),找到所有codeblocks.exe和你的程序.exe进程,右键选择“结束任务”
  • 如果还是无法启动,删除CodeBlocks的配置文件:
    1. 打开用户目录(比如C:\Users\你的用户名
    2. 找到.codeblocks文件夹并删除(会重置CodeBlocks的配置,不会丢失你的项目文件)
  • 重启电脑后再打开CodeBlocks,就能正常运行了

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

火山引擎 最新活动