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)
,它总是从左到右计算,每个 ,
处都有一个序列点;因此,您可能会依赖于 expr1
在 expr2
之前求值,而后者作为逗号表达式的结果。
有了这个,下面的应该可以工作,并且 x
将在 0..3
的范围内,具体取决于哪个条件成立:
int x;
while ( (x=0,l < 0) || (++x,l > 2) || (++x,c < 0) || (++x,c > 2) )
抱歉,如果这太简单了。我想知道哪些条件正在发生。有没有一种方法更能捕捉到这一点,而无需在带有 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)
,它总是从左到右计算,每个 ,
处都有一个序列点;因此,您可能会依赖于 expr1
在 expr2
之前求值,而后者作为逗号表达式的结果。
有了这个,下面的应该可以工作,并且 x
将在 0..3
的范围内,具体取决于哪个条件成立:
int x;
while ( (x=0,l < 0) || (++x,l > 2) || (++x,c < 0) || (++x,c > 2) )