墨羽岚 发表于 2020-4-3 22:03:46

C语言中不能用连续判断来进行判断的原因

我一直以为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本身就在这个区域内时才确确实实为“真”,其他情况下即使正确结果是假,程序一样会输出“真”。
所以还是老老实实用&&和||吧~

倒戈卸甲 发表于 2020-4-4 13:30:49

本帖最后由 倒戈卸甲 于 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不符,逻辑错误。确实有逻辑矛盾的地方,但这矛盾的原因上面规定语法不支持你用减号来进行减法运算。

倒戈卸甲 发表于 2020-4-4 13:35:15

对了,准确来说也不是语法错误,而是语法不支持。不能通过编译器或者会导致编译器崩溃的才是语法错误,这个能通过编译,但结果不是你预期的

墨羽岚 发表于 2020-4-4 16:16:32

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

涨知识了
页: [1]
查看完整版本: C语言中不能用连续判断来进行判断的原因