Использование структур или многомерных массивов в C - PullRequest
0 голосов
/ 24 января 2010

Я хочу создать журнал ошибок. Журнал ошибок должен быть в состоянии сохранить последние 10 ошибок.

Ошибка имеет 3 элемента информации: 1. Номер вины. 2. Название ошибки. 3. Дата и время ошибки.

Как я могу сделать это, используя структуры?

Или я должен сделать это с использованием массивов, и если да, то как?

Журнал неисправностей предназначен только для хранения в памяти.

Ответы [ 4 ]

2 голосов
/ 24 января 2010

Журнал обычно подразумевает какое-то более постоянное хранилище, что может означать, что оно должно быть записано в файл. Если это так, то структура не обязательно требуется. Это может быть реализовано как функция, которая принимает требуемую информацию и генерирует другую информацию (например, время / дата).

Но если это действительно скорее временный тип хранилища, то он может храниться в простом круговом массиве. Сохраните индекс текущей позиции в массиве и запишите в эту позицию.

typedef struct {
   int faultNumber;
   char faultName[50];  // length should probably be a #define
   char faultDate[20];  // date in C could be stored in some kind of char array.
                        // or it could be something representing results of something
                        // like a time_t result.
} LOG_ENTRY;

LOG_ENTRY LOGS[10];
int iCurPos = 0;

Затем добавьте запись в текущей позиции и увеличьте iCurPos и ​​верните ее в 0, когда она достигнет конца.

2 голосов
/ 24 января 2010

Я предполагаю, что вы хотите сохранить его в памяти, тогда вы можете использовать комбинацию struct и array.

Будет делать следующее:

typedef struct {
    int number;
    char* name; // You can use an array instead char name[MAX_FAULT_NAME_LENGTH]
    int timestamp;
} fault_entry;

fault_entry fault_log[10];

Конечно, это махание рукой. Если вы хотите сохранить его в файл, вам нужно сериализовать. Вам нужно подумать о том, какой тип данных использовать для даты / времени и имени. Но это должно помочь вам начать.

0 голосов
/ 24 января 2010

Что-то вроде:

typedef struct fault
{
    int number;
    char *name;
    char *date;
} fault;

fault faults[10];

faults[0].number = 1;
faults[0].name = "Fault Number 1";
faults[0].date = "Today's Date";

/*etc*/

printf("%d\n", faults[0].number);
printf("%s\n", faults[0].name);
printf("%s\n", faults[0].date);

Вам нужно будет решить, какой тип времени использовать, конечно. Здесь я использовал строку.

0 голосов
/ 24 января 2010

Вы должны использовать массив типа struct, такой как

#define NAME_MAXLEN 20
struct fault {
     int number;
     time_t time;
     char name[NAME_MAXLEN];
};

struct fault faults[10];

];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...