Я хотел создать программу, которая отслеживает последний раз, когда пользователь поливал растения (ручная проверка). Итак, в основном ... Пользователь нажимает кнопку, и программа устанавливает сегодняшнюю дату как date1, а затем каждый день обновляет date2. Если разница больше определенной даты, программа возвращает строку.

int main() {
  int time_elapsed = ; \\???
  std::cout << needs_water(difference) << "\n";
  
}

Вот основная функция, а вызываемая функция следующая:

std::string needs_water(int days) {
  if (days > 3){
    return("Time to water the plant.");
  }
  else {
    return("Don't water the plant!");
  }
}

Извините за мой плохой английский и заранее спасибо.

Изменить: в двух словах я хочу знать, как сообщить программе, сколько времени прошло с последней проверки.

0
Giovanni Poggi 19 Янв 2021 в 21:17

2 ответа

Лучший ответ

Вот пример, который должен сделать то, что, как я понял, вы хотите достичь. Замените milliseconds на days (c ++ 20) или на hours

#include <iostream>
#include <string>
#include <chrono>
#include <thread>

using namespace std::chrono;
using namespace std::chrono_literals;

template<typename DurationT>
bool time_elapsed(DurationT time) {
  static auto last_check = steady_clock::now();
  auto now = steady_clock::now();
  auto time_passed = duration_cast<DurationT>(now - last_check);
  if (time_passed > time){
    last_check = now;
    return true;
  }
  else {
    return false;
  }
}

int main()
{
    for(int i=0; i < 12; ++i) {
        std::cout << (time_elapsed(milliseconds{3}) ? 
            "Time to water the plant!" : 
            "Don't water the plant!") << std::endl;
        std::this_thread::sleep_for(1ms);
    }
    
    return 0;
}

https://coliru.stacked-crooked.com/a/7722d28efc6d0c82

0
yussuf 20 Янв 2021 в 09:13

как узнать программе сколько времени прошло с последней проверки.

Либо пусть ваша программа работает все время. Таким образом, вы можете хранить все данные в памяти программ.

Но если программа предназначена для запуска и последующего выхода, тогда вам, очевидно, понадобится внешний объект для хранения состояния . Обычно это простой файл в постоянном месте под домашним каталогом пользователя.

Например, получить текущее время и сохранить его в некоторой форме в файл в постоянном месте. Простейшей этой «формой» были бы секунды с ... некоторого постоянного времени - обычно с эпохи < / а>. Затем при запуске программы посмотрите, существует ли файл, если есть, прочтите в последний раз. Затем получите текущее время с эпохи - разница между значением, хранящимся в файле, и текущим временем будет равна тому, сколько времени прошло.

0
KamilCuk 19 Янв 2021 в 20:23