шли в текущем времени? Зациклить time now с дискретностью в одну секунду? Или есть другие способы, если есть?
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <unistd.h> int main() { time_t t = time(NULL); struct tm tm = *localtime(&t); printf("now: %d-%02d-%02d %02d:%02d:%02d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); int hour = tm.tm_hour; int minute = tm.tm_min; int second = tm.tm_sec; while (1) { // Print the time in HH : MM : SS format printf("%02d : %02d : %02d \r", hour, minute, second); // Clear the output buffer in gcc fflush(stdout); // Increment second second++; // Update hour, minute and second if (second == 60) { minute += 1; second = 0; } if (minute == 60) { hour += 1; minute = 0; } if (hour == 24) { hour = 0; minute = 0; second = 0; } // Wait for 1 second sleep(1); } return 0; } как то такможно
Эмм... а в чём проблема юзать posix time?
Чел просто хозяин этого языка
А если нужно два разных времени отслеживать например два часовых пояса или отслеживать разницу времени двух таймеров в одной программе, то два и более таких цикла могут работать одновременно? У меня только один вывелся либо как мне показалось при определенной последовательности записи кода они взаимно перекрывают друг друга как строка на строку что-ли... Как будто обрывками выводится
Попробуйте посмотрите что делает функция gettimeofday() из sys/time.h кажется. Она возвращает текущее время в формате epoch, а его потом можно в любой часовой пояс преобразовать
Понятно спасибо попробую
Бытует мнение, что разница в 2 часовых поясах это константа
мне надо чтобы шло и выводилось даое часов в одной программе при запуске
Чтобы так сказать тикали
Sleep в часах? Неплохо
У меня все работает https://asciinema.org/a/gC7aKQ6uD0zkCvcxEFhRsm9OP Что конкретно у вас неработает?
Двое разных часов не работает одновременно
У меня на видео двое часов работают. Как вы это реализовали? Где ВАШ код?
И еще вопрос: почему вы считаете, что sleep+ инкремент секунды лучще, чем sleep + time+localtime?
Есть код автономной навигации для самолёта. В нем рассчитывается когда самолёт достигнет точки назначения. Для этого на вход кода от датчика поступает пересчитанная путевая скорость самолёта. Пилот на дисплее видит два времени: текущее и время прибытия пересчитываемое каждую секунду. Со стороны кажется что оно стоит если самолёт держит рекомендуемую скорость полета или же спешит или отстаёт от расчётного. Для этого мне нужен код с двумя таймерами. Таймер текущего времени и расчетного времени в реальном времени.
И вопрос по видео что за версия термукса у вас что вы так легко остановили код и какой командой? ^С ... Или может расширение какое то установлено? Вообще какие пакеты нужно ставить кроме ВИМ и gcc
Не понимаю, зачем тебе два таймера, когда рассчетное время прибытия это по сути текущее время плюс S/V.
Так я так и делаю только идёт какое-то одно а второе стоит
int nav_time(int fl_hours , int fl_minutes, int fl_seconds) { time_t t = time(NULL); struct tm tm = *localtime(&t); int year = tm.tm_year + 1900; int mon = tm.tm_mon + 1; int day = tm.tm_mday; int hours = tm.tm_hour; int minutes = tm.tm_min; int seconds = tm.tm_sec; printf("Время текущее: %02d/%02d/%d %02d:%02d:%02d\n", day, mon, year, hours, minutes, seconds); int c_time = hours * 3600 + minutes * 60 + seconds; int fl_time = fl_hours * 3600 + fl_minutes * 60 + fl_seconds; int res_time = c_time + fl_time; int res_hours = res_time / 3600; int res_minutes = res_time / 60 % 60; int res_seconds = res_time % 60; if(res_hours >= 24) { printf("Ожидаемое прибытие: %02d/%02d/%d %02d:%02d:%02d\n", day + 1, mon, year, res_hours - 24, res_minutes, res_seconds); } else printf("Ожидаемое прибытие: %02d/%02d/%d %02d:%02d:%02d\n", day, mon, year, res_hours, res_minutes, res_seconds); while(1) { t = time(NULL); tm = *localtime(&t); printf("%02d:%02d:%02d ", hours, minutes, seconds); fflush(stdout); seconds++; if(seconds == 60) { minutes += 1; seconds = 0; } if(minutes == 60) { hours += 1; minutes = 0; } if(hours == 24) { hours = 0; minutes = 0; seconds = 0; day += 1; } sleep(1); if(res_hours >= 24) { printf("Ожидаемое прибытие1: %02d/%02d/%d %02d:%02d:%02d\r", day + 1, mon, year, res_hours - 24, res_minutes, res_seconds); } else printf("Ожидаемое прибытие1: %02d/%02d/%d %02d:%02d:%02d\r", day, mon, year, res_hours, res_minutes, res_seconds); fflush(stdout); res_seconds++; if(res_seconds == 60) { res_minutes += 1; res_seconds = 0; } if(res_minutes == 60) { res_hours += 1; res_minutes = 0; } if(res_hours == 24) { res_hours = 0; res_minutes = 0; res_seconds = 0; day += 1; } sleep(1); } return 0; }
Когда ходу изменить порядок то все ломается. Надо чтобы в разных строках было.
На том месте где время текущее должно идти а время ожидаемого прибытия должно быть на другой строке
значит сделайте в разных строках раз надо.
В том то и дело что разные строки затираются одна другой
дело в том, что вы используете управляющие символы, в вашем случае /r. Так же дело в том, что вы видимо не очень понимаете, что делает /r и что воообще имитирует терминал
А как ты это сделал? Чтобы код в телеге так выделялся?
Обсуждают сегодня