该程序的预期输出是什么?

时间:2019-05-25 05:03:18

标签: c

输出是什么,为什么? folk() && (!folk())我不确定是否应执行&&之后的代码。

#include <stdio.h>
#include <unistd.h>
int main()
{
  if(folk() && (!folk())) {
    folk();
  }
  printf("Apple\n");
  fflush(NULL);
  return 0;
}

1 个答案:

答案 0 :(得分:1)

如果false返回if,则不会执行!folk()语句的第二部分(即folk())。如果true返回!folk(),则如果false的第一次执行没有改变folk()的行为,则folk()返回if

因此,在那种情况下,false语句的主体永远不会执行(条件总是返回folk())。

但是,如果第一次调用folk()修改了if的行为,则可能执行bool folk() { static bool ret = false; if (ret) ret = false; else ret = true; return ret; } 语句的主体。

后者的示例:

folk()

在这里,true首先返回false,然后返回true,然后再次返回folk(),依此类推。

现在,使用if(folk() && !folk()) { folk(); } 的此实现,让我们回到您的示例:

folk()
  • true的第一次执行返回false

  • 第二次执行返回!folk(),因此true返回if

  • 因为true语句中的条件现在返回folk(),所以主体被执行,对true的第三次调用再次返回value type ----- ------------------ '\\[' string /\[/ regular expression