Выполняйте действие каждый день после 5 сентября

0

Мне нужно выполнить действие каждый день после 5 сентября. Я написал эту программу

#include <windows.h>

int main()
{
    SYSTEMTIME time;
    GetLocalTime(&time);

    if((time.wMonth = 9 && time.wDay >= 6) || time.wMonth > 9)
    {
        //perform action
        MessageBox(GetForegroundWindow(), "Action performed. Month is " + std::to_string((long long)wMonth), "Alarm!", MB_OK | MB_SYSTEMMODAL);
    }
}

Я запустил эту программу, и отобразится окно сообщения. Но сегодня 22 августа я проверил свои компьютерные часы. Что я делаю не так?

Ссылка SYSTEMTIME

Обновить:
После написания этого вопроса я проверил значения wMonth и wDay, и это 1 и 22, то есть 22 января. Кажется, это ошибка. Что мне делать, чтобы получить правильный месяц?

  • 0
    Я получил это, учитывая порядок приоритета операторов, time.wDay> = 6 вычисляется сначала, чтобы дать 1 (истина), так как сегодня 22, затем 9 && 1, что дает 1. Таким образом, wMonth становится 1.
Теги:
winapi

2 ответа

3
Лучший ответ

if((time.wMonth = 9... должно быть:

if((time.wMonth == 9 ...
               ^^^^

Если вы отмените тест (и многие программисты C++), компилятор испустит ошибку:

if((9 = time.wMonth ...  // error !

Это способ уловить эту частую опечатку.

  • 1
    Вы можете получить некоторую помощь от вашего компилятора, когда вместо этого напишите 9 == time.wMonth, потому что 9 = time.wMonth приведет к ошибке компилятора.
  • 0
    Ах! задача решена. Теперь мне интересно, почему wMonth стал 1, а выражение было wMonth = 9.
Показать ещё 2 комментария
0

Я считаю, что лучше использовать диспетчер cron (Linux) или диспетчер задач (Windows) для планирования вашей работы

  • 0
    На окнах это Task Scheduler.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню