鱼C论坛

 找回密码
 立即注册
查看: 1050|回复: 21

[已解决]求助,代码见附图

[复制链接]
发表于 2021-9-15 21:08:54 | 显示全部楼层 |阅读模式

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

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

x
大佬们问一下为什么红圈里的表达式始终返回真???(编译器提示的,实在琢磨不明白了)

初学c,想要实现一个输入一个英文字符判断是否大小写。为了简化代码,想直接用连不等号写成一行简短的表达式,不用其它变量参与。

但是如果把红圈内代码替换成 getchar() <= 'Z' 的时候,可以正常运行达到目的。

烦请各路大佬指点。

(第一次发帖,如有违反相关论坛发帖规定的望手下留情)
最佳答案
2021-9-15 22:06:03
斐波纳税 发表于 2021-9-15 21:55
对我就是想表达这个意思,但是行不通,编译器提示表达式内容永远为真...

其实表达式 'A'<=getchar()<='Z'是合法的,但是由于运算符是从左向右的,所以 不管输入什么 ,'A'<=getchar()返回不是0或1,而0或1都小于'Z',所以  'A'<=getchar()<='Z' 永远为 真
QQ20210915-0.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-15 21:17:53 | 显示全部楼层
大概是永远为真,你需要在中键加个且(&&),
不加就是取中间的数值,然后系统会帮你强制转换成bool,>65肯定是真
你加了&&才能算的上判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-15 21:29:12 | 显示全部楼层
C语言没有你说的连不等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-15 21:37:24 | 显示全部楼层
2736946915 发表于 2021-9-15 21:17
大概是永远为真,你需要在中键加个且(&&),
不加就是取中间的数值,然后系统会帮你强制转换成bool,>65肯定 ...

不是很懂,我用的关系运算符按理来说整个表达式也应该返回逻辑值啊,假如我输入 'a',值为 97,明显不在表达式范围内,经过关系运算符的运算应该返回是假...而且我连续使用不等号,即使满足 'A' <= , 但是也不满足 <= 'Z'啊。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-15 21:41:30 | 显示全部楼层
Max472 发表于 2021-9-15 21:29
C语言没有你说的连不等

可是我这里表达的连不等意思就是使用关系运算符 >, <, == 这些,这难道不符合c的运算符使用规则吗?而且我刚刚试了下 表达式3 < 4 < 5 可以返回 1, 3 < 4 > 5 返回的就是 0...可能举上面的例子不够严谨,但是这样写的话c也确实能正确执行想表达的意思...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-15 21:46:14 | 显示全部楼层
斐波纳税 发表于 2021-9-15 21:37
不是很懂,我用的关系运算符按理来说整个表达式也应该返回逻辑值啊,假如我输入 'a',值为 97,明显不在 ...

想法是对的,但是表达错了,你这个叫取中间值,所以我才叫你加上&&,这个能把两个逻辑符号连起来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-15 21:47:21 | 显示全部楼层
斐波纳税 发表于 2021-9-15 21:37
不是很懂,我用的关系运算符按理来说整个表达式也应该返回逻辑值啊,假如我输入 'a',值为 97,明显不在 ...

即使满足 'A' <= , 但是也不满足 <= 'Z'啊。。。
你这句话你自己不也是分开读的吗,同理,计算机他也要分开,不然他怎么知道你的意思,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-15 21:50:10 | 显示全部楼层
2736946915 发表于 2021-9-15 21:46
想法是对的,但是表达错了,你这个叫取中间值,所以我才叫你加上&&,这个能把两个逻辑符号连起来

能讲一下取中间值是什么意思嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-15 21:51:11 | 显示全部楼层

行啊,这样
1631713822(1).jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-15 21:55:15 | 显示全部楼层

对我就是想表达这个意思,但是行不通,编译器提示表达式内容永远为真...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-15 21:59:13 | 显示全部楼层
斐波纳税 发表于 2021-9-15 21:50
能讲一下取中间值是什么意思嘛?

字面的意思,就是>A,<Z,取中间的数,只要中间数不为01就是true,
或者你可以试试-1<0<1,这个中间值为0,应该就是false了,
我也没试过。。根据经验猜的,因为这样写代码会被打死的,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-15 21:59:52 | 显示全部楼层
斐波纳税 发表于 2021-9-15 21:55
对我就是想表达这个意思,但是行不通,编译器提示表达式内容永远为真...

https://www.codeleading.com/article/45993739759/
我之前没想过这个问题,看的视频都是用与把两个与起来,这个网址就可以解决你的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-15 22:01:25 | 显示全部楼层
斐波纳税 发表于 2021-9-15 21:50
能讲一下取中间值是什么意思嘛?

关于false和true,只有=0才是false,其余都是true,包括负数,系统会帮你强制转换确保正常运行,只不过没在代码里面体现出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-15 22:06:03 | 显示全部楼层    本楼为最佳答案   
斐波纳税 发表于 2021-9-15 21:55
对我就是想表达这个意思,但是行不通,编译器提示表达式内容永远为真...

其实表达式 'A'<=getchar()<='Z'是合法的,但是由于运算符是从左向右的,所以 不管输入什么 ,'A'<=getchar()返回不是0或1,而0或1都小于'Z',所以  'A'<=getchar()<='Z' 永远为 真
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-15 22:06:35 | 显示全部楼层
所以这样的表达方式不是你的本意
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-15 22:15:37 | 显示全部楼层
斐波纳税 发表于 2021-9-15 21:50
能讲一下取中间值是什么意思嘛?

看汇编秒懂,得出了一个结论,举个栗子你就懂了
int b =1;
如图-a<0<b;
他这里是取-10~1之间的所有数,把它转换成一个数组,
由于大小的限制,所以只能一直覆盖前面一个元素
也就是说无论你的bool值是由b决定
b-1就是你的值

个人猜测,我也不知道对不对
111.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-15 22:19:23 | 显示全部楼层
2736946915 发表于 2021-9-15 21:59
字面的意思,就是>A,

!!!看懂了,我图里写的意思从左往右运算,过第一个关系运算符的时候就已经转换成逻辑值0和1了,这两个值和 ‘Z’ 相比肯定小于 'Z' 且永远成立的,实际上我想要表达的意思计算机没有能够理解...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-15 22:20:24 | 显示全部楼层
斐波纳税 发表于 2021-9-15 22:19
!!!看懂了,我图里写的意思从左往右运算,过第一个关系运算符的时候就已经转换成逻辑值0和1了,这两个 ...

开窍了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-15 22:31:08 | 显示全部楼层

我也是看了你的回答才逐渐理解的,恍然大悟,非常感谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-15 22:33:44 | 显示全部楼层
我在论坛里有一些源代码下载,你可以下载去改一改,这样学习会快一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 19:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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