2010-01-23 4 views
0

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

Ошибка имеет 3 информации: 1. Количество неисправностей. 2. Имя ошибки. 3. Дата по времени неисправности.

Как я могу это сделать с помощью структур?

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

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

+0

@nobugz: Не предполагайте, что код работает где-то, где * есть * файловая система. –

+0

Просто пытаюсь покрыть 99% -ый случай, когда он это делает. Когда это не доступно, они узнают. С надеждой. –

ответ

2

Я предполагаю, что вы хотите сохранить его в памяти, тогда вы можете использовать комбинацию 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

Как вы уже упоминали, было бы лучше использовать массив фиксированной ширины для строки имени для случаев, когда вы хотите сериализовать. –

+0

Да, я просто хочу сохранить его в памяти. Я вижу, что вы там делали. Есть ли способ, которым я могу заказать массив, чтобы сохранить его в порядке новейшей ошибки первой и самой старой? – Anonymouz

+0

Да, вы можете. Чтобы сделать это, каждый раз, прежде чем вставлять элемент, вы копируете все существующие элементы в следующую позицию и удаляете последний элемент. Вставьте новый элемент в позицию 0. Лучше сохранить char *, если вы хотите часто выполнять эти операции против массива символов. –

0

Вы должны использовать массив типа структуры, такие как

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

struct fault faults[10]; 

];

0

Что-то вдоль линий:

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); 

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

2

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

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

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, когда он попадает в конец.

Смежные вопросы