#include <stdio.h>
int main()
{
int k=5;
if(++k < 5 && k++ / 5 || ++k <= 8)
{
printf("%d",k);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么输出7而不是8?(我是编程的初学者所以请耐心等待.)
在&&你的逻辑条件比结合更紧密||,所以你的条件相当于:
((++k<5 && k++/5) || ++k<=8)
Run Code Online (Sandbox Code Playgroud)
以结构化方式呈现代码时更容易阅读,如下所示:
int main() {
int k=5;
if ((++k<5 && k++/5) || ++k<=8) {
printf("%d",k);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
而现在是执行的一击之处.
k 从5开始. ++k<5提升k到6,这不是 <5.&&表达式的后半部分从未被评估过,因为0 && ANYTHING == 0.||是0,右侧不是短路.必须对其进行评估.++k<=8进展k到7,这是 <=8.||是1.if执行语句的"then"子句.k打印当前值7,即7.值得注意的是,你的&&条款的后半部分可能没有按照你的意图行事.k++/5是整数除法,因为k>5在任何时候,k++/5总是如此>=1,因此总是如此.