含布尔表达式的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
相关产品推荐
相关产品推荐

