Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление localtime, Чтобы часики тикали. 
V
    Опции темы
DragoonFighter
Дата 2.1.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Хачу закинуть часики в конзоль, но он их просто показывает, т.е. они не тикают, все стоит на месте. Как сделать чтобы часики тикали, если это возможно? Я использую вот этот код:

Код

time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );

  printf ( "Current local time and date: %s", asctime (timeinfo) ); 


Может с этим нельзя это сделать, но хотелось бы узнать есть ли какая не будь функция в которой часы тикают?
За рание спасибо. 
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
JackYF
Дата 2.1.2008, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(DragoonFighter @  2.1.2008,  17:43 Найти цитируемый пост)
не будь функция в которой часы тикают?

чего? ты сам понял, что сказал? что значит тикают?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
DragoonFighter
Дата 2.1.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



 smile  В смысле вот если посмотреть в Виндовсе, там минутная цифра меняется каждую минуту. Логично! Ну а если воткнуть функцию котороя дает информацию о времени, то она копирует эту инфу и выводит на экран нашей программы. И все. А можно както сделать, чтобы не закрывая окно конзоли информация о времени обновлялась?
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
bsa
Дата 2.1.2008, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



тебе нужно вызывать функцию fflush(0), чтобы сбросить буфер стандартного вывода (чтобы информация отобразилась на экране), затем последовательным выводом символа '\b' ты можешь передвинуть курсор влево на нужную позицию, затем можешь вывести время еще раз. Если запихаешь это в цикл и добавишь задержку sleep(), то часы "пойдут".
PM   Вверх
DragoonFighter
Дата 2.1.2008, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



bsa, охо, ладна щас по эксперементируем! 
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
archimed7592
Дата 2.1.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Код

int x = 0;
printf("x = %d\n", x);
while(true)
    ++x;

DragoonFighter, ты не задавался вопросом, почему в вышеприведённом коде значение на экране не изменяется(не "тикает")?

Это сообщение отредактировал(а) archimed7592 - 2.1.2008, 18:35


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
DragoonFighter
Дата 2.1.2008, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



archimed7592,  потомучто в нем просто копируется информация времени и выводится на экран. 
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
archimed7592
Дата 2.1.2008, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(DragoonFighter @  2.1.2008,  19:49 Найти цитируемый пост)
archimed7592,  потомучто в нем просто копируется информация времени и выводится на экран.  

Вообще говоря, в том фрагменте кода никакой информации времени нет и не копируется, но мыслишь ты в правильном направлении. После вывода на экран переменной(или значения возвращённого ф-цией), изменение этой переменной не будет отражено на экране. То же самое и в твоём случае.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
DragoonFighter
Дата 2.1.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



archimed7592, Т.е. нужно каждый раз запускать программку заново чтобы выводилось актуальное время?
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
archimed7592
Дата 2.1.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



DragoonFighter, не обязательно. Просто нужно его постоянно обновлять.
bsa посоветовал тебе "затирать" выведенное время и выводить его заново(через некоторые промежутки времени) - рекомендую рассмотреть это как один из вариантов решения.
Ещё можно воспользоваться какой-нибудь библиотекой для "продвинутой" работы с консолью, умеющей позиционировать курсор("каретку").


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
DragoonFighter
Дата 2.1.2008, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



archimed7592, 
bsa, да мне эта версия тоже понравилась, и я понял как это действует. Но толька эти функции для меня новые и я не знаю как их использовать. Можно пример?
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
bsa
Дата 2.1.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



DragoonFighter, вообще-то я только две функции привел, для работы с которыми, имхо, документации более чем достаточно. А fflush() я уже и с параметром указал, а sleep() вообще очевидна:
Код
printf("Current time is: ");
while(1) {
       const char *ct = ctime(time(NULL));  //получаем текущее время в текстовом виде
       size = strlen(ct) + 2; //+2 - так как в дальнейшем выводятся еще 2 пробела
       printf("%s  ", ct); //отправляем текущее время и два пробела в стандартный вывод
       fflush(NULL);//сбрасываем все потоки
       while(size--)
          putc('\b');  //выводим необходимое число раз символ backspace для перевода курсора в начало времени
       sleep(1); //ждем 1 секунду
}

PM   Вверх
DragoonFighter
Дата 2.1.2008, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Выдает ошибки:

Код

clock.cpp:13: error: invalid conversion from 'time_t' to 'const time_t*'

clock.cpp:13: error:   initializing argument 1 of 'char* ctime(const time_t*)'

clock.cpp:14: error: 'size' was not declared in this scope
M:/C/Dev-Cpp/include/stdio.h:264: error: too few arguments to function 'int putc(int, FILE*)'
clock.cpp:18: error: at this point in file
clock.cpp:19: error: 'sleep' was not declared in this scope

make.exe: *** [clock.o] Error 1

Execution terminated


--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
bsa
Дата 2.1.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код
#include <stdlib.h>
...
printf("Current time is: ");
int size;
while(1) {
       const time_t tm = time(NULL);
       const char *ct = ctime(&tm);  //получаем текущее время в текстовом виде
       size = strlen(ct) + 2; //+2 - так как в дальнейшем выводятся еще 2 пробела
       printf("%s  ", ct); //отправляем текущее время и два пробела в стандартный вывод
       fflush(NULL);//сбрасываем все потоки
       while(size--)
          putc('\b', stdout);  //выводим необходимое число раз символ backspace для перевода курсора в начало времени
       sleep(1); //ждем 1 секунду
}
Вообще-то недочеты мог бы и сам исправить.
PM   Вверх
DragoonFighter
Дата 2.1.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Благодарю bsa, но вот еще одна последняя вещь, к какому хэдеру принадлежит sllep() ? Это последняя ошибка из за которой не компилируется прога. 
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0571 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.