1

你好我正在尝试在while循环中获得一次输出

While(1){
    if( current->tm_hour == 10 && current->tm_min == 0  ){
        Start_Function();
        std::cout <<  "Started" << std::endl;
    }

    if( current->tm_hour == 12 && current->tm_min == 0  ){
        End_Function();
        std::cout <<  "Ended" << std::endl;
    }

    Sleep(5000);
}

我使用睡眠每 5 秒刷新一次

所以我想要当前的小时和分钟 = 10 和 00

它给我输出 Started 并且它只调用一次函数并且它继续刷新

4

2 回答 2

2

怎么样:

bool start_called = false, end_called = false;
While(1){
    if( current->tm_hour == 10 && current->tm_min == 0 && !start_called  ){
        Start_Function();
        std::cout <<  "Started" << std::endl;
        start_called = true;
    } else
        start_called = false;

    if( current->tm_hour == 12 && current->tm_min == 0 && !end_called ){
        End_Function();
        std::cout <<  "Ended" << std::endl;
        end_called = true;
    } else
        end_called = false;

    Sleep(5000);
}

你可以用函子做得更好,但这有点高级。

于 2012-11-22T02:55:56.560 回答
-1

编辑:根据@Joachim Pileborg 的评论

问题不是输出,而是函数在不应该被多次调用(并打印输出)时被多次调用。——约阿希姆·皮勒伯格

替代解决方案

int hasStarted = 0, hasEnded = 0;
While(1){
if( current->tm_hour == 10 && current->tm_min == 0 && !hasStarted  ){
Start_Function();
    std::cout <<  "Started" << std::endl;
    hasStarted = 1;
}

if( current->tm_hour == 12 && current->tm_min == 0  && !hasEnded ){
End_Function();
    std::cout <<  "Ended" << std::endl;
    hasEnded = 1;
}

Sleep(5000);
}
}

上面的代码将强制它只执行每个操作一次并继续刷新......

我原来的评论:

在您发现的命令行/终端中,输出会连续打印出来。根据您使用的操作系统(window/linux/mac),解决方案将容易或不那么容易。

我建议查找gotoxy()功能

http://www.programmingsimplified.com/c/conio.h/gotoxy

由 Windows 的“conio.h”库或 Linux 的“ncurses.h”库提供。

“ncurses.h”没有,gotoxy()但它会为您提供一种方法来做同样的事情。

于 2012-11-22T02:47:22.463 回答