While 中哪个条件为真?

Which condition is true in While?

抱歉,如果这太简单了。我想知道哪些条件正在发生。有没有一种方法更能捕捉到这一点,而无需在带有 if 结构的块内重复它们?我用的是C语言

while ( l < 0 || l > 2 || c < 0 || c > 2 )

您可以将它们 "on the fly" 分配给之前声明的变量:

bool ll0, lg2, cl0, cg2;
while((ll0 = l<0) || (lg2 = l>2) || (cl0 = c<0) || (cg2 = c>2)) {
    if(ll0) {
        // l is less than 0
    } else if(lg2) {
        // l is greater than 2
    } else if(cl0) {
        // c is less than 0
    } else if(cg2) {
        // c is greater than 2
    }
    // ...
}

注意 if-else 链,因为 || 运算符短路(即,如果第一个操作数已经 true,则第二个操作数甚至不会被评估),例如ll0 是正确的,其他值将不会被正确分配。

话虽这么说,老实说我不会打扰 - 只需重复条件,如果这些只是整数变量,这些比较不会让你付出任何代价(实际上,编译器甚至可能会保留比较在某些情况下有价值并回收它)。

您可以使用没有条件的循环,在循环中计算条件,并在任何条件为真时中断。

while (1)   // or for(;;)
{
  bool one = l < 0;
  bool two = l > 2;
  bool three = c < 0;
  bool four = c > 2;
  if (one || two || three || four) break;
  // bool variables are available there
}

如果您想访问所有条件,则不能对它们使用短路评估。所以确保你真的想事先存储它们。

您可以使用逗号表达式,例如 (expr1,expr2),它总是从左到右计算,每个 , 处都有一个序列点;因此,您可能会依赖于 expr1expr2 之前求值,而后者作为逗号表达式的结果。

有了这个,下面的应该可以工作,并且 x 将在 0..3 的范围内,具体取决于哪个条件成立:

int x;
while ( (x=0,l < 0) || (++x,l > 2) || (++x,c < 0) || (++x,c > 2) )