关于C语言do-while循环逻辑与条件终止的疑问
问题解答:为什么逻辑与(&&)的循环会在单一strcmp返回0时终止?
嘿,这个问题问得挺到位的,咱们一步步拆解清楚:
首先得明确两个核心知识点:
strcmp()的返回值:当两个字符串完全相等时返回0,不相等时返回非0的值(具体正负取决于字符串的字典序,但这里咱们只需要区分0和非0就行)。do-while循环的逻辑:先执行一次循环体,再判断条件——条件为**非0(真)就继续循环,条件为0(假)**就终止循环。
现在看你的循环条件:
while(strcmp(String,Yes) && strcmp(String,No));
咱们分三种输入情况具体分析:
输入"Y"的时候:
strcmp(String,Yes)返回0,此时逻辑与&&的左边已经是0,根据逻辑与的短路特性(左边为假时,右边不会再执行),整个表达式的结果就是0。循环条件为假,所以循环直接终止。输入"N"的时候:
strcmp(String,Yes)返回非0(因为输入不是Y),接着执行右边的strcmp(String,No)返回0,此时非0 && 0的结果是0,循环条件为假,循环终止。输入其他字符(比如"X")的时候:
两个strcmp都返回非0,非0 && 非0的结果是1(真),循环条件成立,会继续执行循环体,让用户重新输入。
简单总结一下:你的循环条件其实是在说只有当输入既不是Y也不是N的时候,才继续循环——只要输入是Y或者N其中一个,条件就会变成假,循环自然就终止啦。
内容的提问来源于stack exchange,提问作者VallyMan
相关产品推荐
相关产品推荐

