Чтение и отображение метки времени из двоичного файла - PullRequest
0 голосов
/ 19 марта 2020

В настоящее время я работаю над проектом колледжа c, в котором я записал показания, сохраненные в структуре, в двоичный файл. В этой структуре я также сохраняю время и дату, когда элементы были введены. Затем я открываю файл в отдельной программе и читаю значения, которые работают нормально, однако мне трудно разобраться, как читать и отображать время и дату, сохраненные в файле, на экране. Ниже приведен код этого раздела в моей второй программе.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#pragma warning(disable : 4996)

struct readings {
    double temperature;
    double wind_direction;
    double wind_speed;
    time_t time;
};



int main(void)
{
    struct readings* readings = NULL;
    int option;
    printf_s("Welcome to Data Acquisition Program\n");
    printf_s("Options are as follows:\n 1:Load File\n 2:Search Weather by date\n 3:View Monthly Data\n 4:Export to Excel\n 5:Exit\n");
    printf_s("Enter an option: ");
    scanf_s("%d", &option);

    if (option == 1)
    {

        FILE* pFile;
        errno_t error;
        int num_readings;
        //struct readings* time_t time;
        time_t t;
        struct tm* tmp;
        char MY_TIME[50];
        time(&t);

        tmp = localtime(&t);

        error = fopen_s(&pFile, "weather.bin", "rb");

        if (error == 0)
        {
            fread(&num_readings, sizeof(int), 1, pFile);
            readings = malloc(sizeof(struct readings) * num_readings);
            fread(readings, sizeof(struct readings), num_readings, pFile);

            strftime(MY_TIME, sizeof(MY_TIME), "%x - %I:%M%p", tmp);
            printf("Date & Time: %s\n", MY_TIME);

            for (int i = 0; i < num_readings; i++)
            {
                printf_s("Temperature: %lf\n", readings[i].temperature);
                printf_s("Wind Direction: %lf\n", readings[i].wind_direction);
                printf_s("Wind Speed: %lf\n", readings[i].wind_speed);
            }
            fclose(pFile);
        }
        else { printf_s("Error: %d", error); }
    }

1 Ответ

0 голосов
/ 19 марта 2020

Я думаю, что вы ищете

ctime(&(readings[i].time))

Но, пожалуйста, не используйте эту запись. Вместо этого сделайте

for (struct readings *t = readings; t < readings + num_readings; t++) {
        printf_s("Temperature: %lf\n", t->temperature);
        printf_s("Wind Direction: %lf\n", t->wind_direction);
        printf_s("Wind Speed: %lf\n", t->wind_speed);
        printf_s("Time: %s\n", ctime(&t->time));
}  
...