鱼C论坛

 找回密码
 立即注册
查看: 1500|回复: 3

[技术交流] C语言中不能用连续判断来进行判断的原因

[复制链接]
发表于 2020-4-3 22:03:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我一直以为C语言中不能使用连续判断(x<y<z)的原因是C语言无法运行连续的判断,可能会出现语法错误而不是逻辑错误
但是我今天看我们大学计算机老师几年前的教学视频时发现:
这样做不仅仅是语法错误,还有逻辑错误!
比如
90<x<100

由于逻辑判断是从左往右(左结合性)
假如x是89,那么90<89为假,即0,0<100为真,与数学中的90<89<100不符;
假如x是91,那么90<91为真,即1,1<100为真,与数学中的90<91<100相符
假如x是101,那么90<101为真,即1,1<100为真,与数学中的90<101<100不符。

综上所诉,这种情况下只有x本身就在这个区域内时才确确实实为“真”,其他情况下即使正确结果是假,程序一样会输出“真”。
所以还是老老实实用&&和||吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-4 13:30:49 From FishC Mobile | 显示全部楼层
本帖最后由 倒戈卸甲 于 2020-4-4 13:38 编辑

你这就……想的有些偏了,而且是典型的思维方式还不够靠近计算机。你可以先思考一下为啥python支持连续判断。
其实你所谓的逻辑错误,就是语法不支持。语法不支持,才导致了这个逻辑错误。
而python为什么支持连续判断呢?那当然是因为语法支持。解释器会将a<b<c解释为a<b且b<c。
但c语言的编译器没有为a<b<c单独准备一个语法,编译器认为这就是(a<b)<c,并给出结果。你所谓的逻辑错误不过是编译器没按照你心中的那个逻辑来运行。这就好比,在计算机中用减号来定义加法,输入5-2,结果它竟然等于8!你说,这不合理,与数学中的5-2=3不符,逻辑错误。确实有逻辑矛盾的地方,但这矛盾的原因上面规定语法不支持你用减号来进行减法运算。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-4 13:35:15 From FishC Mobile | 显示全部楼层
对了,准确来说也不是语法错误,而是语法不支持。不能通过编译器或者会导致编译器崩溃的才是语法错误,这个能通过编译,但结果不是你预期的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-4 16:16:32 | 显示全部楼层
倒戈卸甲 发表于 2020-4-4 13:30
你这就……想的有些偏了,而且是典型的思维方式还不够靠近计算机。你可以先思考一下为啥python支持连续判断 ...

涨知识了
)@4J%@@TNSPZ(JJ4MPH3THL.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 13:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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