привет я пытаюсь получить вывод один раз в то время как цикл
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, и он вызывает функцию только один раз, и он продолжает обновление
Редактировать: В свете комментария @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()
но это даст вам возможность сделать то же самое.
Как насчет:
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);
}
Вы могли бы сделать это лучше с функторами, но это немного сложнее.