这是C51语言的BUG吗
这个if判断同一个变量,用||只要满足其中一个条件就执行
可这里用||并没有起到作用
反而用&&才是正确的
你这里的逻辑判断是不正确的
如果用||,则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))
一般不要轻易怀疑编译器,首先要从自身找问题
一般不要轻易怀疑 STC,尽量先怀疑自己,STC 如有错:
他或者已自己纠正了,你根本碰不到;
或者已在相应的数据手册中写了应用注意事项通知大家了,也给了解决方案 zhp 发表于 2023-2-7 09:01
你这里的逻辑判断是不正确的
如果用||,则P->CD_GunDong为任何值,条件都为真
我想你这里应该是想实现P->CD ...
if ((P->CD_GunDong != 31) && (P->CD_GunDong != 47))
为什么要这样写才对呢
我只需要其中一个条件满足就行
这样分明就是两个条件同时满足 确实,单纯的逻辑问题。在图片的模式下,不管那个变量数值为多少,都满足if的条件。
其实楼主多思考几遍自己也就能发现了,逻辑问题多推敲。
C语言到目前为止,能发现的bug基本不是专门研究的,是基本不用考虑有问题的。
毕竟使用者基数这么大,版本也迭代了这么多,能被简单发现的bug早就修复了。 楼主逻辑问题,你的条件是任何值都为真,所以任何值都满足。
你能用文字描述你的逻辑要求吗? 本帖最后由 zhp 于 2023-2-7 12:29 编辑
QQ624353765 发表于 2023-2-7 10:14
if ((P->CD_GunDong != 31) && (P->CD_GunDong != 47))
为什么要这样写才对呢
我只需要其中一个条件满足 ...
逻辑判断时,一般多个“==”才和“||”搭配,即等于其中一个值就满足条件
而多个“!=”则和“&&”搭配,即不等于所有的值条件才满足
如果搭配错了,就可能出现逻辑判断出错的情况
(当然,也不是绝对的)
最好你能用文字描述你的逻辑要求,大家再帮你看看
C51编译器针对你这条语句,是绝对没问题的
梁工 发表于 2023-2-7 10:36
楼主逻辑问题,你的条件是任何值都为真,所以任何值都满足。
你能用文字描述你的逻辑要求吗? ...
就是任何值为真,除了31和47 zhp 发表于 2023-2-7 12:21
逻辑判断时,一般多个“==”才和“||”搭配,即等于其中一个值就满足条件
而多个“!=”则和“&&”搭配,即 ...
独立创建项目测试是正确的
但在这里逻辑是相反的 QQ624353765 发表于 2023-2-7 13:19
就是任何值为真,除了31和47
对于你的代码,值为31和47时也为真(其实是所有的值都为真)
所以你不觉得是你的逻辑判断有问题吗?
页:
[1]
2