Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2010, 15:15   #1
KEIego
Пользователь
 
Регистрация: 24.09.2010
Сообщений: 22
Вопрос Модификация значения в строке вывода

Добрый день! Я все по той же программе, имитирующей работу цифровых часов.
В задании по разработке программы указано: "Обновление показаний часов должно происходить с периодичностью в одну секунду. При этом модифицироваться должны только те цифры строки вывода, значения которых изменились относительно предыдущего показания часов". Я правильно понимаю: нужно в самом коде программы изменить способ сохранения данных часов, минут и секунд в массив buf? Т.е. в моем случае программа при условии, что значение секунд больше по отношению к предыдущему времени, перезаписывает все (и секунды, и минуты, и часы) поверх старой записи. А нужно реализовывать это иначе?
Код:
#include <stdio.h>
#include <windows.h>
#include <time.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;*/
    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);
       }
   }               
        }
        
        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(500);
                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;
}
KEIego вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модификация фаила *.db @#dro# Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 30.01.2010 18:15
правильно написать формулу нахождения минимального значения из диапазона чисел в строке Legame Microsoft Office Excel 14 01.03.2009 22:29
Указание последнего в строке значения прерывистого ряда значений. Baloo007 Microsoft Office Excel 10 06.08.2008 15:20
модификация программы olla-la Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 10.05.2008 14:01
Выбор значения из массива по столбцу и строке Almaas Помощь студентам 4 25.01.2008 14:56