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

这是C51语言的BUG吗

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-06-10 13:10:51
已绑定手机

236

主题

340

回帖

1650

积分

金牌会员

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


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


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


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

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-06-28 11:41:02

26

主题

1051

回帖

4034

积分

超级版主

积分
4034
发表于 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
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

741

主题

1万

回帖

1万

积分

管理员

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

236

主题

340

回帖

1650

积分

金牌会员

积分
1650
发表于 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
  • 打卡总天数:107
  • 最近打卡:2025-06-29 17:17:29

75

主题

6164

回帖

1万

积分

超级版主

积分
12946
发表于 2023-2-7 10:36:54 | 显示全部楼层
楼主逻辑问题,你的条件是任何值都为真,所以任何值都满足。
你能用文字描述你的逻辑要求吗?
  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-06-28 11:41:02

26

主题

1051

回帖

4034

积分

超级版主

积分
4034
发表于 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
  • 打卡总天数:455
  • 最近打卡:2025-06-10 13:10:51
已绑定手机

236

主题

340

回帖

1650

积分

金牌会员

积分
1650
发表于 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
  • 打卡总天数:455
  • 最近打卡:2025-06-10 13:10:51
已绑定手机

236

主题

340

回帖

1650

积分

金牌会员

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

独立创建项目测试是正确的
但在这里逻辑是相反的
  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-06-28 11:41:02

26

主题

1051

回帖

4034

积分

超级版主

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

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

本版积分规则

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

GMT+8, 2025-6-29 18:24 , Processed in 0.133034 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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