suchenxiang 发表于 2022-2-6 23:19:48

关于短路求值的一个问题

#include <stdio.h>

int main()
{
      char ch = "FishC";
      int i;

      printf("请输入你想访问的字符序号(0~5):");
      scanf("%d", &i);

      if (!(i >= 0 && i <= 5 && printf("%c\n", ch)))//逻辑值为真打印ch对应的字符,逻辑值为假打印非法访问四个字,应该怎么理解!()用两个逻辑与(&&)连接的这串代码呢?(明白整体想表达的意思,但是自己不懂得解释为什么这么输)
      {
                printf("非法访问!\n");
      }

      return 0;
}

jhanker 发表于 2022-2-7 00:19:14

当i在0~5且出处正确时(i >= 0 && i <= 5 && printf("%c\n", ch)) 返回真 否则运行printf("非法访问!\n");

ckblt 发表于 2022-2-7 13:27:48

如果 i < 0,
首先 条件 中的 i >= 0 为假,然后条件直接为真(执行非法访问),不继续去计算后面的。
如果 i > 5,
首先 条件 中的 i >= 0 为真,但是 条件 中的 i <= 5 为假,然后条件直接为真(执行非法访问)。
如果 i >= 0 并且 i <= 5,
首先 条件 中的 i >= 0 为真,然后 条件 中的 i <= 5 为真,printf('%c\n', ch) 返回 2(也是真),然后条件为假(不执行非法访问)。
页: [1]
查看完整版本: 关于短路求值的一个问题