我正在使用C做超市模拟器。我有一个结构,可以保存数百个虚构客户的数据,如下所示:
typedef struct clients {
int ID;
char Name[50];
}Clients;
我导入了一个包含这些客户端的.txt文件。它基本上是这样的:
1234 Peter Parker
4724 Barack Obama
3851 John Wick
9428 Donald Trump
...
所以现在我必须模拟一个超市,我有一个更新自己的计时器,从结构中挑选随机客户并将它们放入超市,我需要跟踪它们中有多少以及哪些是超市内。问题是,我不知道如何将客户放入市场并存储这些客户的数据。例如,假设客户A和B进入超市,我如何将这些特定客户存储在市场中,以便我可以搜索哪些客户在市场内?我应该创建一个包含struct Clients数据的结构吗?我不知道。很高兴,如果你能帮助我。
答案 0 :(得分:0)
您可以创建客户端结构数组。
以下是我找到的一些资源。 http://www.asic-world.com/scripting/structs_c.html http://www.c4learn.com/c-programming/c-array-structure/
答案 1 :(得分:0)
首先想到的是使用某种定向(或双向)列表,其中包含对客户端结构的引用。例如,
typedef struct {
Client *client;
Visitor *next;
Visitor *prev;
} Visitor;
可以是该列表的节点之一。对于列表的头部或尾部,您可以指定NULL值来区分不同的极端情况,但这取决于实现。
列表本身:
typedef struct {
Visitor *head;
Visitor *tail;
} VisitorList;
这种结构的缺点是访问者的数量具有线性复杂性,这可能不是您想要的。
答案 2 :(得分:0)
答案是,有很多方法可以做到这一点,各有利弊。如果你关心性能并且你的数据大于数百并且数以千计,那么你可能会开始担心你使用什么类型的数据结构,这会成为关于数据结构和你如何处理的问题正在寻找名字。如果您不那么担心性能,可以使用数组实现,在其中创建Clients
数组,如下所示:声明可以为其分配值的200个客户端数组。
Clients array[200];
如果你获得的Clients
比你分配的内存更多malloc
,那么你可能需要struct
更多的内存才能适应它。
或者,您可以使用链接列表实现并创建某种typedef struct {
Client *client;
node *next;
node *prev;
} node;
来表示具有相应函数的节点来操作它。
enum
但这需要编写更多代码来添加和删除节点。
所以,它确实是你想要的问题。
编辑:
如果您只想添加一种方法来了解某个客户是否在超市中,为什么不创建client
并将其添加到struct
enum
?我更喜欢这个而不是bool,因为如果你想将某人放在另一个地方,那么你可以选择将它添加到enum place {
supermarket,
none
};
。
sendSearchRequest