Расписание поездов: Какой формат следует использовать для даты и времени - C++ Builder
Формулировка задачи:
Решение задачи: «Расписание поездов: Какой формат следует использовать для даты и времени»
typedef struct
{ int day;
int mon;
int year;
int h;
int m;
} tm1; // объявить структуру для даты/времени. свою, чтобы не было секунд/недель и прочего
typedef struct
{ char t_o[10];
tm1 dt1; // дата и время отправления, то есть элементом структуры будет являться структура, правильно?
char t_p[10];
tm1 dt2; // дата и время прибытия
char tip[12];
} B;
unsigned size=2;
B *data = (B*)malloc(size*sizeof(B)); // это мой динамический массив будет, элементы которого структуры B
int i=0; //счетчик
void __fastcall TForm1::downl_btClick(TObject *Sender)
{
while(!feof(inp)) // пока не конец файла, считываю
{ fscanf(inp, "%s %?? %s %?? %s", &data[i].t_o, &data[i].dt1, &data[i].t_p, &data[i].dt2, &data[i].tip);
// что нужно поставить на место знаков вопроса?
TListItem *Item = ListView1->Items->Add();
Item->Caption =data[i].t_o;
Item->SubItems->Add(???); // и как вывести это в ячейку listview в нормальном виде?
Item->SubItems->Add(data[i].t_p);
Item->SubItems->Add(???);
Item->SubItems->Add(data[i].tip);
i++;
size++;
data = (B*)realloc(data, size*sizeof(B));
}
}
Объяснение кода листинга программы
В этом коде используется структура tm1 для представления даты и времени. Это структура, объявленная внутри кода, которая содержит поля для дня, месяца, года, часов и минут.
Далее, используется структура B, которая содержит массив символов t_o для хранения строки отправление, t_p для хранения строки прибытие, dt1 для хранения даты и времени отправления и dt2 для хранения даты и времени прибытия. Также есть строка tip, которая, вероятно, содержит дополнительную информацию о поезде.
В функции TForm1::downl_btClick используется функция fscanf для чтения данных из файла. Похоже, что она считывает пять строк: отправление и дату и время отправления, прибытие и дату и время прибытия, а также строку tip.
Считанные данные добавляются в ListView1 в виде элементов списка. Каждое строка добавляется как заголовок, а затем подзаголовки - это дата и время отправления и прибытия.
Вопросы, вероятно, относятся к тому, как правильно считывать и отображать дату и время. Вместо знаков вопроса в коде нужно использовать функции форматирования даты и времени, которые преобразуют значения dt1 и dt2 в строки в нужном формате. Например, можно использовать функции asctime и ctime из стандартной библиотеки C.
Также стоит отметить, что в коде есть потенциальная проблема с памятью. Функция realloc может вызвать ошибку, если попытается выделить память для size элементов, которые на самом деле больше не нужны. Это может произойти, если в файле есть пустые строки. Для решения этой проблемы необходимо проверять, что i не превышает size перед вызовом realloc.