QQ624353765 发表于 2023-2-6 15:29:39

这是C51语言的BUG吗




这个if判断同一个变量,用||只要满足其中一个条件就执行


可这里用||并没有起到作用


反而用&&才是正确的

zhp 发表于 2023-2-7 09:01:55

你这里的逻辑判断是不正确的
如果用||,则P->CD_GunDong为任何值,条件都为真
我想你这里应该是想实现P->CD_GunDong为31或者47时为假其它值为真吧
代码应该这样写:
if (!((P->CD_GunDong == 31) || (P->CD_GunDong == 47)))
或者这样:
if ((P->CD_GunDong != 31) && (P->CD_GunDong != 47))

一般不要轻易怀疑编译器,首先要从自身找问题

神农鼎 发表于 2023-2-7 09:15:21

一般不要轻易怀疑 STC,尽量先怀疑自己,STC 如有错:
他或者已自己纠正了,你根本碰不到;
或者已在相应的数据手册中写了应用注意事项通知大家了,也给了解决方案

QQ624353765 发表于 2023-2-7 10:14:46

zhp 发表于 2023-2-7 09:01
你这里的逻辑判断是不正确的
如果用||,则P->CD_GunDong为任何值,条件都为真
我想你这里应该是想实现P->CD ...

if ((P->CD_GunDong != 31) && (P->CD_GunDong != 47))
为什么要这样写才对呢
我只需要其中一个条件满足就行
这样分明就是两个条件同时满足

TheHellc 发表于 2023-2-7 10:19:24

确实,单纯的逻辑问题。在图片的模式下,不管那个变量数值为多少,都满足if的条件。
其实楼主多思考几遍自己也就能发现了,逻辑问题多推敲。
C语言到目前为止,能发现的bug基本不是专门研究的,是基本不用考虑有问题的。
毕竟使用者基数这么大,版本也迭代了这么多,能被简单发现的bug早就修复了。

梁工 发表于 2023-2-7 10:36:54

楼主逻辑问题,你的条件是任何值都为真,所以任何值都满足。
你能用文字描述你的逻辑要求吗?

zhp 发表于 2023-2-7 12:21:23

本帖最后由 zhp 于 2023-2-7 12:29 编辑

QQ624353765 发表于 2023-2-7 10:14
if ((P->CD_GunDong != 31) && (P->CD_GunDong != 47))
为什么要这样写才对呢
我只需要其中一个条件满足 ...
逻辑判断时,一般多个“==”才和“||”搭配,即等于其中一个值就满足条件
而多个“!=”则和“&&”搭配,即不等于所有的值条件才满足
如果搭配错了,就可能出现逻辑判断出错的情况
(当然,也不是绝对的)

最好你能用文字描述你的逻辑要求,大家再帮你看看
C51编译器针对你这条语句,是绝对没问题的

QQ624353765 发表于 2023-2-7 13:19:33

梁工 发表于 2023-2-7 10:36
楼主逻辑问题,你的条件是任何值都为真,所以任何值都满足。
你能用文字描述你的逻辑要求吗? ...

就是任何值为真,除了31和47

QQ624353765 发表于 2023-2-7 13:21:13

zhp 发表于 2023-2-7 12:21
逻辑判断时,一般多个“==”才和“||”搭配,即等于其中一个值就满足条件
而多个“!=”则和“&&”搭配,即 ...

独立创建项目测试是正确的
但在这里逻辑是相反的

zhp 发表于 2023-2-7 13:23:34

QQ624353765 发表于 2023-2-7 13:19
就是任何值为真,除了31和47
对于你的代码,值为31和47时也为真(其实是所有的值都为真)
所以你不觉得是你的逻辑判断有问题吗?
页: [1] 2
查看完整版本: 这是C51语言的BUG吗