Форум программистов, компьютерный форум CyberForum.ru

Счётчик до ДР - C++

Восстановить пароль Регистрация
 
Spotter
8 / 8 / 2
Регистрация: 09.11.2010
Сообщений: 130
01.06.2011, 19:13     Счётчик до ДР #1
Добрый день, уважаемые форумчане! Вот пришла в голову мысль, в связи с приближающимся ДР, написать такую программу. Вот думаю как бы это реализовать, может кто-нибудь поможет с идеями по поводу реализации на языке С (без плюсов)? Заранее спасибо за внимание! )

Добавлено через 36 минут
Up///

Добавлено через 1 час 10 минут
UP///
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
01.06.2011, 21:56     Счётчик до ДР #2
<time.h>
time(), difftime() в помощь.
Spotter
8 / 8 / 2
Регистрация: 09.11.2010
Сообщений: 130
02.06.2011, 00:04  [ТС]     Счётчик до ДР #3
kazak, Это я понимаю. Вопрос, как задать нужную дату, до который будет вестись отсчёт в днях, часах, минутах, секундах?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
02.06.2011, 11:19     Счётчик до ДР #4
Струткура tm, считываешь в соответствующие поля год, месяц и т.д. Далее переводишь в тип time_t.
Spotter
8 / 8 / 2
Регистрация: 09.11.2010
Сообщений: 130
02.06.2011, 16:08  [ТС]     Счётчик до ДР #5
kazak, Вот я написал начало, объявил структуру и считал нужную информацию, на счёт приведения в тип time_t можно подробнее?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct
{
    int year[10];
    int month[10];
    int day[2];
    int time[10];
} tm;
 
int main()
{
    printf("Countdown to Happy Birthday!\n\n");
    printf("Enter year: ");
    scanf("%d", tm.year);
    printf("\nEnter month: ");
    scanf("%d", tm.month);
    printf("\nEnter day: ");
    scanf("%d", tm.day);
    printf("\nEnter time: ");
    scanf("%d", tm.time);
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
02.06.2011, 16:17     Счётчик до ДР #6
tm это стандартная структура, объявленная в time.h
http://cplusplus.com/reference/clibrary/ctime/tm/

Добавлено через 49 секунд
приводится к time_t функцией mktime
http://cplusplus.com/reference/clibrary/ctime/mktime/
Spotter
8 / 8 / 2
Регистрация: 09.11.2010
Сообщений: 130
02.06.2011, 16:33  [ТС]     Счётчик до ДР #7
kazak, Правильно я тут сделал, или нет?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int main()
{
    time_t rawtime;
    struct tm *timeinfo;
    int year, month, day, time;
 
    printf("Countdown to Happy Birthday!\n\n");
    printf("Enter year: ");
    scanf("%d", &year);
    printf("Enter month: ");
    scanf("%d", &month);
    printf("Enter day: ");
    scanf("%d", &day);
    printf("Enter time: ");
    scanf("%d", &time);
    getch();
 
 
    time ( &rawtime );
    timeinfo = localtime ( &rawtime );
    timeinfo->tm_year = year - 2011;
    timeinfo->tm_mon = month - 7;
    timeinfo->tm_mday = day;
 
     mktime ( timeinfo );
}
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
02.06.2011, 17:15     Счётчик до ДР #8
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
 
int main(int argc, char* argv[])
{
   int d, h, m, s;
   time_t dr, cur, diff;
   struct tm *date;
 
   system("chcp 1251");
   time(&cur); // получаем текущее время
   date = localtime(&cur); // переводим полученное время в структуру для записи текущего года
                           // чтобы не мешался
   printf("Введите месяц вашего рождения: "); //********
   scanf("%i", &date->tm_mon);                //
   date->tm_mon--; // нумерация месяцев 0-11  // остальные поля переписываем
   printf("Введите день вашего рождения: ");  //
   scanf("%i", &date->tm_mday);               //
   date->tm_hour = date->tm_min = date->tm_sec = 0; //*******
   dr = mktime(date); // приводим полученную структуру к time_t
   time(&cur); // обнавляем текущее время
   diff = (dr-cur); //вычисляем разность
   if (diff < 0)
      diff += 31536000;  // если др уже проше, делаем поправку. 31536000 - количество секунд в одном годе
   while(diff)
   {
      d = diff/86400; // выделяем количество дней
      h = (diff%86400)/3600;  // часов
      m = (diff%3600)/60;   // минут
      s = diff%60;       // секунд
      diff--;          // уменьшаем разность на 1
      system("cls");   // очищаем экран, выводим соответствующее сообщение
      printf("До вашего дня рождения осталось %d дней, %d часов, %d минут, %d секунд\n", d,h,m,s);
      Sleep(937); // делаем секундную задержку и все повторяем пока разность не станет 0
   }
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2011, 17:29     Счётчик до ДР
Еще ссылки по теме:

C++ Счётчик заданных объектов
Не работает счётчик, изменяющий 2 переменных C++
Парсер/счётчик строки на основе stack/deque C++
C++ Не работает счётчик
Нужно вставить счётчик C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Spotter
8 / 8 / 2
Регистрация: 09.11.2010
Сообщений: 130
02.06.2011, 17:29  [ТС]     Счётчик до ДР #9
kazak, Ох, спасибо большое. Не думал, что аж столько нюансов тут. Один вопрос (уже сталкивался с этим, но забывал спросить), почему на Windows 7 в MSVS не отображает русский язык, даже если мы его задаём в начале программы?
Yandex
Объявления
02.06.2011, 17:29     Счётчик до ДР
Ответ Создать тему
Опции темы

Текущее время: 05:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru