找回密码
 立即注册
查看: 2297|回复: 15

这是C51语言的BUG吗

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-05-02 09:52:56
已绑定手机

229

主题

328

回帖

1475

积分

金牌会员

积分
1475
发表于 2023-2-6 15:29:39 | 显示全部楼层 |阅读模式
T7}GUT_WOCG6H$R_R%QY1_8.png


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


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


反而用&&才是正确的
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 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))

一般不要轻易怀疑编译器,首先要从自身找问题
  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-2-7 09:15:21 | 显示全部楼层
一般不要轻易怀疑 STC,  尽量先怀疑自己,STC 如有错:
他或者已自己纠正了,你根本碰不到;
或者已在相应的数据手册中写了应用注意事项通知大家了,也给了解决方案
  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-05-02 09:52:56
已绑定手机

229

主题

328

回帖

1475

积分

金牌会员

积分
1475
发表于 2023-2-7 10:14:46 | 显示全部楼层
zh*** 发表于 2023-2-7 09:01
你这里的逻辑判断是不正确的
如果用||,则P->CD_GunDong为任何值,条件都为真
我想你这里应该是想实现P->CD ...

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

点评

逻辑判断时,一般多个“==”才和“||”搭配,即等于其中一个值就满足条件 而多个“!=”则和“&&”搭配,即不等于所有的值条件才满足 如果搭配错了,就可能出现逻辑判断出错的情况  详情 回复 发表于 2023-2-7 12:21

1

主题

25

回帖

85

积分

注册会员

积分
85
发表于 2023-2-7 10:19:24 | 显示全部楼层
确实,单纯的逻辑问题。在图片的模式下,不管那个变量数值为多少,都满足if的条件。
其实楼主多思考几遍自己也就能发现了,逻辑问题多推敲。
C语言到目前为止,能发现的bug基本不是专门研究的,是基本不用考虑有问题的。
毕竟使用者基数这么大,版本也迭代了这么多,能被简单发现的bug早就修复了。
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2023-2-7 10:36:54 | 显示全部楼层
楼主逻辑问题,你的条件是任何值都为真,所以任何值都满足。
你能用文字描述你的逻辑要求吗?
  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-2-7 12:21:23 | 显示全部楼层
本帖最后由 zhp 于 2023-2-7 12:29 编辑
QQ6243*** 发表于 2023-2-7 10:14
if ((P->CD_GunDong != 31) && (P->CD_GunDong != 47))
为什么要这样写才对呢
我只需要其中一个条件满足 ...

逻辑判断时,一般多个“==”才和“||”搭配,即等于其中一个值就满足条件
而多个“!=”则和“&&”搭配,即不等于所有的值条件才满足
如果搭配错了,就可能出现逻辑判断出错的情况
(当然,也不是绝对的)

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

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-05-02 09:52:56
已绑定手机

229

主题

328

回帖

1475

积分

金牌会员

积分
1475
发表于 2023-2-7 13:19:33 | 显示全部楼层
梁*** 发表于 2023-2-7 10:36
楼主逻辑问题,你的条件是任何值都为真,所以任何值都满足。
你能用文字描述你的逻辑要求吗? ...

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

点评

那就是“沙发”一楼的恢复,两个判断都可以。  详情 回复 发表于 2023-2-7 15:11
对于你的代码,值为31和47时也为真(其实是任意值都为真) 所以你不觉得是你的逻辑判断有问题吗?  详情 回复 发表于 2023-2-7 13:23
  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-05-02 09:52:56
已绑定手机

229

主题

328

回帖

1475

积分

金牌会员

积分
1475
发表于 2023-2-7 13:21:13 | 显示全部楼层
zh*** 发表于 2023-2-7 12:21
逻辑判断时,一般多个“==”才和“||”搭配,即等于其中一个值就满足条件
而多个“!=”则和“&&”搭配,即 ...

独立创建项目测试是正确的
但在这里逻辑是相反的
  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-2-7 13:23:34 | 显示全部楼层
QQ6243*** 发表于 2023-2-7 13:19
就是任何值为真,除了31和47

对于你的代码,值为31和47时也为真(其实是所有的值都为真)
所以你不觉得是你的逻辑判断有问题吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 20:40 , Processed in 0.157668 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表