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

这是C51语言的BUG吗

[复制链接]
  • TA的每日心情

    前天 06:52
  • 签到天数: 155 天

    [LV.7]常住居民III

    142

    主题

    199

    回帖

    1686

    积分

    金牌会员

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


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


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


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

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-29 10:31
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    16

    主题

    712

    回帖

    2536

    积分

    超级版主

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

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

    该用户从未签到

    550

    主题

    9346

    回帖

    1万

    积分

    管理员

    积分
    13920
    发表于 2023-2-7 09:15:21 | 显示全部楼层
    一般不要轻易怀疑 STC,  尽量先怀疑自己,STC 如有错:
    他或者已自己纠正了,你根本碰不到;
    或者已在相应的数据手册中写了应用注意事项通知大家了,也给了解决方案
  • TA的每日心情

    前天 06:52
  • 签到天数: 155 天

    [LV.7]常住居民III

    142

    主题

    199

    回帖

    1686

    积分

    金牌会员

    积分
    1686
     楼主| 发表于 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))
    为什么要这样写才对呢
    我只需要其中一个条件满足就行
    这样分明就是两个条件同时满足

    点评

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

    该用户从未签到

    1

    主题

    25

    回帖

    79

    积分

    注册会员

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

    该用户从未签到

    46

    主题

    2968

    回帖

    6691

    积分

    超级版主

    积分
    6691
    发表于 2023-2-7 10:36:54 | 显示全部楼层
    楼主逻辑问题,你的条件是任何值都为真,所以任何值都满足。
    你能用文字描述你的逻辑要求吗?
  • TA的每日心情
    开心
    2024-4-29 10:31
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    16

    主题

    712

    回帖

    2536

    积分

    超级版主

    积分
    2536
    发表于 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编译器针对你这条语句,是绝对没问题的

  • TA的每日心情

    前天 06:52
  • 签到天数: 155 天

    [LV.7]常住居民III

    142

    主题

    199

    回帖

    1686

    积分

    金牌会员

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

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

    点评

    那就是“沙发”一楼的恢复,两个判断都可以。  详情 回复 发表于 2023-2-7 15:11
    zhp
    对于你的代码,值为31和47时也为真(其实是任意值都为真) 所以你不觉得是你的逻辑判断有问题吗?  详情 回复 发表于 2023-2-7 13:23
  • TA的每日心情

    前天 06:52
  • 签到天数: 155 天

    [LV.7]常住居民III

    142

    主题

    199

    回帖

    1686

    积分

    金牌会员

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

    独立创建项目测试是正确的
    但在这里逻辑是相反的
  • TA的每日心情
    开心
    2024-4-29 10:31
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    16

    主题

    712

    回帖

    2536

    积分

    超级版主

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

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

    本版积分规则

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

    GMT+8, 2024-5-9 01:20 , Processed in 0.069333 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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