Программа для имитации работы часов - 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;
}