如何在没有if-else的情况下无限循环或循环到极限
How to infinite loop or loop up to a limit without an if-else
我想知道是否有一种方法可以编写一个函数,它只接受一个输入,即循环次数的最大计数,如果数字为负数,它将执行无限循环,而不使用if-else
即
void func(int nAttempts) // if nAttempts <= 0, do an infinite loop
{
if ( nAttempts <= 0 )
{ // do an infinite loop
}
else
{ // do a loop up to nAttemtps
}
}
我想知道是否有一种方法可以在没有if-else 的情况下做到这一点
while ((nAttempts < 0) || (nAttempts-- > 0)) {...}
但是。。。为什么?这会降低代码的可读性,因为if
/else
可以非常清楚地表明您的意图。
我认为这是一个技巧问题?这是我的看法:
void f(int n)
{
n < 0 ? []{ while(true); }() : [&]{ while(n--); }() ;
}
循环本身内部有一个条件,它不是一个显式if,但它是一个分支。由于懒惰的评估,该表达式的实际评估也变得完全。因此,这个问题有点荒谬,因为即使没有if语句,仍然存在条件语句。然而,你的问题的答案如下:
void optionalInfiniteLoop(int nAttempts){
while(nAttempts < 0 || nAttempts-- != 0){
...
}
}
看到这一点并理解懒惰评价,nAttempts<首先评估0。如果它是真的,则不需要运行||,因此它永远不会通过减去太远来包装int。如果为false,则while循环的第二部分进行求值,直到nAttempts变为0。我认为这样做不会节省任何东西,事实上,你可能会通过检查nAttempts<0,而不是只做一次。
在应用程序的上下文中,性能几乎肯定是无法衡量的,我认为上面的内容看起来更简洁,但它实际上更多的是一种风格方法,而不是技术方法。
void func( int nAttempts )
{
while (nAttempts)
{
// do stuff
--nAttempts;
}
}
基本上,在每次迭代结束时,您减去一个"try"。当它到达0
时,你停止。如果它一开始就已经是负的,那么它将变得越来越负(尽管我想它最终会溢出)。
相关文章:
- 有没有办法重复循环循环?
- 无限而循环不工作C++
- 我在C 初学者中发现了无限的循环问题
- 谁能告诉我为什么我的程序在无限的循环中进行
- 虽然第三次循环循环,尽管在我眼中没有满足它的条件,因此打印了一个空字符串
- 避免以不同的迭代剂的循环循环避免几乎相同的代码重复
- 为什么这条线是无限的循环
- 我得到一个无限的循环,我不确定为什么或如何修复它
- C 更改了与循环无关的东西后,卡在无限的循环中
- 为什么我有这个无限的循环
- 试图打破一段循环时,卡在无限的循环中
- 如何通过在Qt中按esc来摆脱无限while循环
- 我的声明是无限的循环
- 无限 while 循环 - 字符关闭不起作用C++
- 无限 while 循环在要求用户输入 2 个数字时发生
- 在无限 while 循环中调用 Sleep() 有多重要
- C++:布尔表达式导致无限 while 循环
- 读取所有数据后进行无限cin循环
- 如何修复一个无限while循环
- C字符串无限For循环的小C[]