You need to enable JavaScript to run this app. 初学C语言自创骰子对战游戏 do-while循环未按预期终止求助
优惠活动
大模型
产品
解决方案
定价
更多

初学C语言自创骰子对战游戏 do-while循环未按预期终止求助

骰子对战程序的问题修复

你两次代码跑不对的核心原因

  • 第一次写的循环持续条件逻辑错误
    你当前的do-while循环退出判断是while((lifeJoel>0) || (lifeGohan>0)),意思是只要任意一方还有剩余血量,循环就会一直运行。这和你要的“任意一方血量到0就立刻终止战斗”完全相反:哪怕Joel已经被打剩-15血,只要Gohan还剩1滴血,循环就会继续扣血;只有两边血量都跌到0以下时,循环才会退出,完全不符合预期。
  • 第二次写的KO变量逻辑颠倒,还存在未初始化的隐患
    你声明的KO变量没有给初始赋值,栈内存里存的是之前残留的随机垃圾值,会直接导致程序出现不可控的随机运行结果。而且你后续的判断逻辑是:只要有人血量≤0,就给KO赋值为0,再搭配循环条件while(KO==0)——等于说触发KO判定的时候,循环反而会继续运行,和你想的“KO触发就停”完全反过来。加上如果前面几轮对战没人把对方打空血,KO一直保持垃圾值,程序甚至会直接崩溃。

核心逻辑要记牢:do-while括号里写的是循环需要继续运行的前提条件,不是触发停止的条件。要实现“任意一方血≤0就停”,本质就是“只有双方血都大于0的时候,才继续开下一轮对战”。

可直接运行的修复参考代码

另外新手写C的时候一定要注意:所有局部变量定义时最好直接给初始值,不然随机内存值带来的玄学bug很难排查;rand和srand对应的函数头文件是stdlib.h,之前漏加的话在新编译器下会直接报警告。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main()
{
    int attackJoel, attackGohan;
    // 定义时直接初始化血量,避免漏赋值
    int lifeJoel = 20, lifeGohan = 20;
    time_t t;
    
    srand(time(&t));
    printf("初始状态 Joel 血量: %d\tGohan 血量: %d\n", lifeJoel, lifeGohan);

    do
    {
        // 生成双方骰子随机攻击值(1-6点)
        attackJoel = (rand() % 6) + 1;
        attackGohan = (rand() % 6) + 1;
        
        // 扣血计算
        lifeJoel = lifeJoel - attackGohan;
        lifeGohan = lifeGohan - attackJoel;
        
        printf("本轮结算 Joel 血量: %d (受到攻击%d点)\tGohan 血量: %d (受到攻击%d点)\n", 
               lifeJoel, attackGohan, lifeGohan, attackJoel);

    // 循环继续的前提:双方血量都大于0,只要有一方≤0就立刻退出
    } while (lifeJoel > 0 && lifeGohan > 0);

    // 循环退出后加个结算提示,更符合游戏逻辑
    if(lifeJoel <= 0 && lifeGohan <=0) {
        printf("\n本轮对战结果:双方同归于尽\n");
    } else if(lifeJoel <=0) {
        printf("\n本轮对战结果:Gohan 获胜,Joel 被击败\n");
    } else {
        printf("\n本轮对战结果:Joel 获胜,Gohan 被击败\n");
    }
    return 0;
}

新手容易踩的细节提醒

  • 逻辑运算符别搞混:用&&的时候,只有两边条件都成立整体才为真;用||的时候,只要任意一边条件成立整体就为真。第一次写的代码就是把循环条件里的&&错写成了||,直接导致循环逻辑彻底反向。
  • 别用无返回值的main函数写法,现在C标准要求main函数要有int类型的返回值,老的直接写main()的写法虽然部分编译器兼容,但不是规范写法,换个编译环境可能就跑不通。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 06:54:09