在重复调用的函数中,使用cout只打印一次语句



在重复调用或更新的函数中,是否可以在窗口中使用cout将一行文本打印到控制台?

为了提供一些范围,我有一个键盘输入功能,它被调用来检查按键情况,当我按下"C"时,我的相机值会更新,我会向控制台打印确认信息,如下所示:cout << "nView switched to 'Default View。。。"<<endl;`但它会在无限循环中永远打印出来。

这听起来可能是一个简单的问题,但这是我第一次遇到这样的问题。

void keyboard()
{
   if (CAM_DEF) //switch to default view
   {
       cout << "nView switched to 'Default View`..." << endl;
       Q_PRESSED = false;
       E_PRESSED = false;
   }
    ... //more key presses
}

您可以使用静态局部变量来防止多次打印:

void function()
{
    static bool runOnce= true;
    if(runOnce)
    {
        cout << //print stuff
        runOnce = false;
    }
    ... do other stuff
}

或者使用lambda来回答C++11的花哨问题,lambda更短,但可读性较差:

using namespace std;
void function()
{
    static const auto runOnce = [] { cout << "Hello" << endl; return true;}();
}
int main()
{
    function();
    function();
    function();
    return 0;
}

结果:

Hello

最新更新