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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы