for循环中&&与||运算符有何区别?为何示例中&&无法触发break?
为什么&&无法触发break,||可以触发?
你代码里的判断条件ch == 'y' && ch == 'Y'本身是恒假的,和for循环本身无关,问题出在逻辑运算符的基础语义:
- 单个字符变量
ch同一时间只能存储一个字符值,不可能同时等于小写'y'和大写'Y'两个不同的ASCII值 &&(逻辑与)要求运算符左右两个判断条件同时成立,整个表达式的结果才为真,才会执行后续的break语句。你的条件永远不可能满足,自然不会触发break- 换成
||(逻辑或)后,只要运算符左右两个判断条件任意一个成立,整个表达式结果就为真,不管用户输入小写y还是大写Y都会命中条件,正常触发break
如果要实现“输入y或Y就退出循环”的需求,正确写法就是if(ch == 'y' || ch == 'Y')。
逻辑与&&和逻辑或||的核心区别
两个运算符的规则是C语言的通用语法,和是否在for循环中使用没有关联,核心差异如下:
- 真值规则不同
&&:全真为真,一假即假。只有左右两个操作数的布尔值都为真时,整体结果才为真;只要有一个操作数为假,整体结果直接为假||:一真即真,全假为假。只要左右两个操作数任意一个布尔值为真,整体结果就为真;只有两个操作数都为假时,整体结果才为假
- 短路规则不同
&&短路:如果左侧操作数已经判定为假,右侧操作数不会被执行,直接返回假||短路:如果左侧操作数已经判定为真,右侧操作数不会被执行,直接返回真
内容的提问来源于stack exchange,提问作者sensie
相关产品推荐
相关产品推荐

