在C语言中使用结构或多维数组
我想创建一个故障日志。故障日志应该能够存储最后10个故障 故障有3条信息: 1.故障数。 2.错误名称。 3.故障日期和时间 如何使用structs执行此操作 或者我应该使用数组来实现它,如果是这样,如何实现在C语言中使用结构或多维数组,c,C,我想创建一个故障日志。故障日志应该能够存储最后10个故障 故障有3条信息: 1.故障数。 2.错误名称。 3.故障日期和时间 如何使用structs执行此操作 或者我应该使用数组来实现它,如果是这样,如何实现 故障日志仅用于存储在内存中。我假设您希望将其存储在内存中,那么您可以使用struct和array的组合 像下面这样的方法可以: typedef struct { int number; char* name; // You can use an array instead
故障日志仅用于存储在内存中。我假设您希望将其存储在内存中,那么您可以使用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];
当然这是挥手。如果要将其存储到文件中,则需要序列化。您需要考虑日期/时间和名称的数据类型。但是它应该可以帮助您入门。我假设您希望将其存储在内存中,然后您可以使用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];
当然这是挥手。如果要将其存储到文件中,则需要序列化。您需要考虑日期/时间和名称的数据类型。但它应该可以帮助您入门。您应该使用结构类型的数组,例如
#define NAME_MAXLEN 20
struct fault {
int number;
time_t time;
char name[NAME_MAXLEN];
};
struct fault faults[10];
]) 应该使用结构类型的数组,例如
#define NAME_MAXLEN 20
struct fault {
int number;
time_t time;
char name[NAME_MAXLEN];
};
struct fault faults[10];
]) 大致如下:
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);
当然,您需要决定使用哪种时间类型。这里,我使用了一个字符串。大致如下:
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);
当然,您需要决定使用哪种时间类型。在这里,我使用了一个字符串。日志通常意味着某种更持久的存储,这可能意味着它应该写入文件。如果是这样,则不一定需要结构。它可以实现为一个函数,接受所需信息并生成其他信息(例如,时间/日期) 但如果它确实是一种临时存储类型,那么它可以存储在一个简单的循环数组中。保留数组中当前位置的索引并写入该位置
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。日志通常意味着某种更持久的存储,这可能意味着它应该写入文件。如果是这样,则不一定需要结构。它可以实现为一个函数,接受所需信息并生成其他信息(例如,时间/日期) 但如果它确实是一种临时存储类型,那么它可以存储在一个简单的循环数组中。保留数组中当前位置的索引并写入该位置
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。正如您所提到的,在需要序列化的情况下,最好使用固定宽度的字符数组作为名称字符串。是的,我只想将其存储在内存中。我知道你在那里做了什么。有没有一种方法可以让阵列按最新故障的先后顺序排列?是的,你可以。为此,每次插入图元之前,都要将所有现有图元复制到下一个位置,并删除最后一个图元。在位置0处插入新元素。如果您想经常对其中的字符数组执行这些操作,那么最好保留char*。一个更好的选择是,每次添加一个元素时移动所有元素,只需保留当前“top”元素的索引,并在替换当前“top”元素时增加该索引(模10)。根据Mark Wilkins的回答,这是一个循环缓冲区:正如你提到的,如果你想序列化,最好使用固定宽度的字符数组作为名称字符串。是的,我只想将其存储在内存中。我知道你在那里做了什么。有没有一种方法可以让阵列按最新故障的先后顺序排列?是的,你可以。为此,每次插入图元之前,都要将所有现有图元复制到下一个位置,并删除最后一个图元。在位置0处插入新元素。如果您想经常对其中的字符数组执行这些操作,那么最好保留char*。一个更好的选择是,每次添加一个元素时移动所有元素,只需保留当前“top”元素的索引,并在替换当前“top”元素时增加该索引(模10)。根据马克·威尔金斯的回答,这是一个循环缓冲区:@nobugz:不要假设代码运行在有文件系统的地方,只是试图覆盖99%的情况。如果没有,他们会知道的。希望如此。@nobugz:不要假设代码运行在有文件系统的地方。只是尝试覆盖99%的情况。如果没有,他们会知道的。有希望地。