gpt4 book ai didi

c++ - 检测第一次通过 do-while

转载 作者:行者123 更新时间:2023-11-30 03:03:37 25 4
gpt4 key购买 nike

我有一个 do-while 循环,每次它的状态(例如通过/失败)改变时都需要记录一次消息(这样它不会使日志困惑),但每次它仍然需要做其他事情通过循环。使用一个简单的 bool 变量基本上可以告诉您是否已经记录了该消息,一旦您处于已知状态,它就会起作用。但是,如果您希望在任何一种情况下(通过/失败)第一次打印消息,您都必须考虑到这一点。例如,如果您将条件默认为 true,并且实际上第一次为 true,则它不会记录“True”消息 b/c 它认为它已经为真(反之亦然 ic false)。

这似乎是一个 nullable 的好地方带有 ic=Null 的 bool 值,但在那些不存在的语言中,该怎么办?

我能想到的最简单的解决方案是使用一个额外的 bool 变量,如“firstTime = True”,但当我觉得应该有更微妙的方法来处理它时,使用它作为一个基本的解决方法总是困扰我。另一种选择是将 do-while 的突破条件用作您用作条件的任何变量的初始条件,但是当有人阅读 int status = STATUS_QUIT 时,这可能会造成混淆,并且它当然需要比 bool firstTime = true 更多的解释性注释。第三种选择是使用枚举而不是 bool 值,并使用 {firstTime, true, false} 或其他东西。

是否有其他原因需要使用其中一种,或者是否有更好的方法?

我想出了两个选项的代码示例:

第一次使用bool:

bool firstTime = true, infoFound = false;
do
{
if (getInfo())
{
if (!infoFound)
{
// log it (ONCE)(important)
infoFound = true;
}
// use info (every time)
}
else if (infoFound || firstTime)
{
// log it (ONCE)(important)
infoFound = false;
firstTime = false;
}
// FYI, WaitForStatusUpdate is a blocking call...
} while (STATUS_QUIT != WaitForStatusUpdate());

使用 while 循环“突破条件”作为检查变量的初始条件:
(status 在 do-while 结束时更新,因此如果 status == breakOutConditiondo 部分将不会再次执行;我们可以在这里利用这个优势并设置 status = breakOutContition 初始 - 第一次通过它将是 breakOutCondition 但任何后续循环 将是其他东西...仍然不确定我喜欢这个,因为它有点像 hack...

bool infoFound = false;
int status = STATUS_QUIT;
do
{
if (getInfo())
{
if (!infoFound)
{
// log it (ONCE)(important)
infoFound = true;
}
// use info (every time)
}
else if (infoFound || firstTime)
{
// log it (ONCE)(important)
infoFound = false;
}
status = WaitForStatusUpdate();
} while (STATUS_QUIT != status);

(我将其标记为 c++,因为我正在使用它,但这确实适用于具有类似结构的任何语言)

最佳答案

枚举不是更清晰吗?

enum State { Unknown, Pass, Fail };
State state = Unknown;
...
State newState = getInfo() ? Pass : Fail;
if (newState != state) { log(); state = newState; }

关于c++ - 检测第一次通过 do-while,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9264609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com