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

含布尔表达式的C++ loading函数无法正常工作,请求技术排查

排查C++函数中布尔表达式的逻辑异常问题

嘿,我一眼就看出你代码里的核心问题了——条件判断时用错了运算符!

你看这两行:

if (wsound = true)
// 还有
else if (wsound = false)

这里的=是赋值运算符,不是用来做相等比较的==。这会导致完全不符合预期的逻辑:

  • 第一个if语句会直接把true赋值给wsound,而赋值表达式的结果就是true,所以不管你传入的wsound原本是什么值,都会执行if块里的播放声音+打印代码。
  • 后面的else if永远不会被触发,因为前面的条件已经永远为true了。

修正后的代码

void loading(bool wsound) { 
    if (wsound == true) { 
        PlaySound(TEXT("sounds/intro.wav"), NULL, SND_ASYNC); 
        cout << ".........."; Sleep(1000); 
        cout << ".........."; Sleep(1000); 
        cout << ".........."; Sleep(1000); 
        cout << ".........."; Sleep(1000); 
        cout << ".........."; Sleep(1000); 
        cout << ".........." << endl; Sleep(1000); 
    } else if (wsound == false) { 
        cout << ".........."; Sleep(1000); 
        cout << ".........."; Sleep(1000);
        // 补充你未写完的剩余代码
    }
}

更简洁的推荐写法

对于布尔类型的变量,其实不需要和true/false做比较,直接用变量本身或者取反就可以,这样代码更简洁,还能避免不小心用错赋值运算符的低级错误:

void loading(bool wsound) { 
    if (wsound) { // 等价于 wsound == true
        PlaySound(TEXT("sounds/intro.wav"), NULL, SND_ASYNC); 
        // 打印和睡眠的代码保持不变
    } else { // 等价于 wsound == false
        // 无声音时的打印逻辑
    }
}

内容的提问来源于stack exchange,提问作者Mr.Shaking

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:26:58