代码之家  ›  专栏  ›  技术社区  ›  Jussi Hietanen

while循环条件非常混乱

  •  0
  • Jussi Hietanen  · 技术社区  · 9 年前

    */
    

    来。

    while(!(input[i] == '*' && input[i+1] == '/'))
    {
      i++;
    }
    

    但这不是吗?

    while(input[i] != '*' && input[i+1] != '/')
    {
      i++;
    }
    

    由于某种原因,第二种变体甚至从未进入循环。我试着想了想,但找不到它们为什么不能完全相同的工作的原因。

    5 回复  |  直到 8 年前
        1
  •  3
  •   unalignedmemoryaccess    9 年前

    !(something AND something) NAND 它们可以表示为 !something OR !something

    while (!(input[i] == '*' && input[i+1] == '/')) {
    

    //Pick your syntax from these 2 options
    while (input[i] != '*' || input[i+1] != '/')
    while (!(input[i] == '*') || !(input[i+1] == '/'))
    

    怎样 过渡 往返或工作。

    现在考虑一下,在输入X和Y的非门之后有与非门的与非门。结果取反,两个输入都取反。要分离或的两个输入,必须执行以下步骤:

         ____      __
    x --|    \    |  \
        | AND |---|NOT|--- (NAND)
    y --|____/    |__/
    
    • 更改和或

    然后你会得到:

    x --- NOT GATE --- \ 
                          -- OR GATE -- NOT (from NAND) -- NOT (negate output)
    y --- NOT GATE --- /
    
    • 如果你想做相反的事情,你可以做(NOR和and),只需交换OR和and以及所有其他步骤。
        2
  •  1
  •   GokRix    9 年前

    while(!(input[i] == '*' && input[i+1] == '/'))
    {
      i++;
    }
    

    生成与非门的真值表

    input[i]  input[i+1] Output
        0          0       1  
        0          1       1  
        1          0       1
        1          1       0
    

    while(input[i] != '*' && input[i+1] != '/')
    {
      i++;
    }
    

    input[i]  input[i+1] Output
        0          0       1  
        0          1       0  
        1          0       0
        1          1       0
    

    现在,您可以很容易地看到为什么两个while循环会产生两个不同的结果。

        3
  •  0
  •   Aakash Verma    9 年前

    首先计算表达式的第一个或左侧 看看我们是否也需要检查第二个(如果它为false,这意味着我们不需要将第二个作为 False && anything = False ).

    input[i] != '*' . 这就是为什么当字符不在行的开头时,循环在第一次执行时退出。

        4
  •  0
  •   JTeam    9 年前

    while (input[i] != '*' || input[i+1] != '/')
    

    如果我不是明星,那就不能阻止评论。 如果我是星号*,那么如果我+1不是斜杠“/”,那么它不能是块注释。

        5
  •  0
  •   chrillelundmark    9 年前

    (input[i] == '*' && input[i+1] == '/')
    

    当评估为!如果为true,则进入循环。为了这个!真的,你的一个表达需要失败。

    在你测试的第二个语句中。。。

    input[i] != '*' && input[i+1] != '/'