C ++ получить вывод один раз в то время как цикл

привет я пытаюсь получить вывод один раз в то время как цикл

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, и он вызывает функцию только один раз, и он продолжает обновление

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

предоставляется библиотекой «conio.h» для Windows или «ncurses.h» для Linux.

«ncurses.h» не имеет gotoxy() но это даст вам возможность сделать то же самое.

-1

Другие решения

Как насчет:

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);
}

Вы могли бы сделать это лучше с функторами, но это немного сложнее.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector