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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2009, 20:21   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию описать масив типо время

Здраствуйте, вот наконец решил переидти от делфи к си...
Пытаюсь чото делать нашёл две отличные книги читаю...
У меня вопрос
Как описать масив типом время?

Например в делфи можно было примерно так

A:array [10] of TDateTime;

ну или типо double, как сделать это си?
И если можно подскажите функции для перевода из строки в тайм и обратно. Заранее благодарен

з.ы. Почему в раздели пр оси нету "Для новичков" где бы начинаюшии могли задавать такие простые вопрсоы как этот например
Dozent вне форума Ответить с цитированием
Старый 01.11.2009, 21:19   #2
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Добрый вечер!
Массивы на си выглядят так:
массив из десяти целочисленных элементов типа int:

Код:
int myarray[10];
массив из десяти элементов времени типа time_t:
Код:
time_t mytimearray[10];
Пример работы со временем:

Код:
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
  char buffer [80];

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

  strftime (buffer,80,"Сейчас:  %H:%M%p.",timeinfo);
  puts (buffer);
  
  return 0;
}
Данный код получает текущее время, с помощью timeinfo = localtime ( &rawtime ) , а затем в строку buffer (строка - массив элементов типа char), с помощью функции strftime, копирует: %H - час (в формате 24 ч) и %M - минуту. Итого в строке: "Сейчас 20:12".
Так же доступны следующие форматы:

Цитата:
%a - аббревиатура названия дня недели
%A - полное название дня недели
%b - аббревиатура названия месяца
%B - полное название месяца
%c - дата и время одной строкой
%d - число месяца
%j - день года
%I - час в 12-ти часовом формате
%m - месяц, как число
%S - секунды
%x - строка с датой, согласно локали
%X - строка с текущим временем
%y - год в виде двух последних чисел
%Y - год полностью
%Z - часовой пояс в виде аббревиатуры
Еще функции для работы со временем:
char * asctime ( const struct tm * timeptr );
эта функция преобразовывает структуру времени struct tm в вид, пригодный для восприятия человеком. Работа с этой структурой приведена в коде выше.

char * ctime ( const time_t * timer );
Эта функция выполняет аналогичные функции, но принимает, в качестве аргумента, непосредственно объект time_t.
oleg kutkov вне форума Ответить с цитированием
Старый 02.11.2009, 09:31   #3
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

если мне например надо к системному времени прибавить 10 мин и потмо в таймер сравнивать его
НУ например в делфи можно было сделать так:

Код:
var NewTime:TTime;
...
NewTime:=Time+StrToTime('00:10:00');// процедура клика кнопки
...
//в собитые таймера
If NewTime=Time then Действие;
Как это будит выглядить в си? ПОдскажите плз
Dozent вне форума Ответить с цитированием
Старый 02.11.2009, 10:13   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю:
Код:
#include <windows.h>
...
SYSTEMTIME a;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2009, 10:20   #5
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

а как с ней дальеш работать?
Как сделать так чтобы получить переменую содержашую текушее время + нужное? в формате времени желательно,а не в виде строки, чтобы было удобнее оперировать

Код:
  time_t rawtime;
  struct tm * timeinfo;
  char buffer [80];
  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  strftime (buffer,80,"%H:%M%:%S",timeinfo);
  puts (buffer);
  Edit1->Text = buffer;
  if(buffer == "10:19:00") ShowMessage(123);
Попробовал сравнивать получиное время со строкой, проблема в том что buffer некоректно выводится..

10:180001
10:180002
...
10:180059
Dozent вне форума Ответить с цитированием
Старый 02.11.2009, 10:27   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Dozent
А-а-а у тя Борланд.
Ну так все просто:
Код:
TTime aga=StrToTimeDef(Edit1->Text,0);
А вот насчет
Цитата:
текушее время + нужное
Это ты поясни.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2009, 10:32   #7
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ну вот смотри просто я провожу аналогию с делфи
так как делалось
есть переменая описаная типом TTime (double)
мы берём текушее время Time + {переводим из стрового типа в Time} StrToTime('00:10:00');// тоесть к текушему добавляем 10 мин

По суде тип TDateTime соответсвует типу double целая часть это дата а после запятой это время, т.е. мы прибовляли нужное нам число и получали число соотвествуешее времени которое будит черзе 10 мин, как то так
Вот и мне бы хотелось узнать как оперироват ьс типом time_t потому что сравнивать строки не всегда удобно
Dozent вне форума Ответить с цитированием
Старый 02.11.2009, 10:33   #8
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

я просто пока решил на буилдере работать чтобы си для меня не был полным шоком)
Dozent вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[HTML] Что то типо пароля Рамик Помощь студентам 0 27.10.2009 19:19
Время нажатия на кнопку мыши(Время реакции) Кирилл13 Помощь студентам 1 11.04.2009 19:41
Масив rizii Общие вопросы C/C++ 2 09.01.2009 13:30
Как лучше организовать базу данных типо как в ICQ Руслантус БД в Delphi 3 09.08.2008 23:57