Программа для имитации работы часов - C (СИ)
Формулировка задачи:
Доброго времени суток!
Программа должна имитировать работу цифровых часов для отображения времени с точностью до одной секунды.
При написании возникла проблема, а именно: необходимо (вдобавок к тому, что имеется) сделать возможным передачу данных (начального показания часов) через аргументы командной строки. Т.е. передаю программе любое время (11.12.31) и начинается отсчет. На данный момент программа может только с помощью функции time() узнавать текущее время данной системы и отображать его в потоке стандартного вывода. Помогите разобраться, как реализовать имитацию работы цифровых часов с данными, полученными через аргументы командной строки.
#include <stdlib.h> #include <time.h> #include <stdio.h> int main() { char *buf; struct tm*ptr; time_t lt; lt=time(NULL); ptr=localtime(<); buf =(char*)calloc(8, sizeof(char)); sprintf(buf,"%02d:%02d:%02d", ptr->tm_hour, ptr->tm_min, ptr->tm_sec); putc('\n', stdout); int hour=ptr->tm_hour; int min=ptr->tm_min; int sec=ptr->tm_sec; fprintf(stdout, "\r%s", buf); fflush(stdout); while (1) { lt=time(NULL); ptr=localtime(<); if((ptr->tm_sec>sec)||(ptr->tm_min>min)||(ptr->tm_hour>hour)) { sprintf(buf,"%02d:%02d:%02d",ptr->tm_hour,ptr->tm_min,ptr->tm_sec); fprintf(stdout, "\r%s", buf); fflush(stdout); } } }
Решение задачи: «Программа для имитации работы часов»
textual
Листинг программы
#include <stdio.h> #include <unistd.h> int main(int argc, char **argv){ unsigned int h, m, s; if ( argc < 2 ){ fprintf(stderr, "Usage: %s hh:mm:ss\n", *argv); return 1; } if ( sscanf(argv[1], "%u:%u:%u", &h, &m, &s) != 3 || h > 23 || m > 59 || s > 59 ){ fprintf(stderr, "wrong arguments!\n"); return 1; } printf("%02u:%02u:%02u", h, m, s); fflush(stdout); while ( 1 ){ sleep(1); if ( ++s > 59 ){ s = 0; if ( ++m > 59 ){ m = 0; if ( ++h > 23 ) h = 0; } } printf("\b\b\b\b\b\b\b\b%02u:%02u:%02u", h, m, s); fflush(stdout); } return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д