我正在开发一个任务列表程序,在我上课之前刷新我的C.我有两个结构,任务和任务列表。
这是任务结构:
typedef struct task
{
char name[100];
bool completed; /* bool is described as an enum in an included header file */
date due_date; /* date is a described as a struct in an included header file */
} task;
我有以下工作职能:
我的问题与哪些变量作为函数的参数和返回的内容有关。
我想将此任务列表用于cli接口,然后将其更改为GUI,因此我希望能够轻松切换。
首先,我有add_task()malloc() - 一个新任务并返回一个指向该任务的指针,然后delete_tasklist()以递归方式通过并释放内存,因为它删除了任务列表。我从OOP和Java的经验中得到了这种方法。
在C中设计这个的最佳方法是什么?
add_task()函数是否应该将一个任务结构添加到列表中,或者只是应该在任务中的变量并让add_task()函数初始化它?
我是否应该编写一个get_task()函数,该函数返回指向具有给定名称的任务的指针,如print_task()和delete_task(),这将带有一个任务指针,或者那些是否需要char指针并找到任务自己?
有关如何设计这些功能的I / O的任何指导都非常有用。
答案 0 :(得分:2)
由于您的数据结构是一个任务列表,因此使用任务结构调用add_task()
更简洁(任务列表不必知道任务结构的内部表示)。
使用create_task()
方法接收任务字段并返回填充了这些字段的任务结构可能很方便。
逻辑上,create_task()
属于任务结构,而add_task()
属于任务列表。 (例如,如果您使用OO语言编写,则会TaskList.AddTask(task)
和Task.Create(name, dd, isCompleted)
)
get_task()
方法,您需要多次使用(正如您所说,print_stack()
,delete_stack()
)。
将此代码封装在函数中显然比代码重复更好。 (例如,如果您在此代码中发现错误,则必须先修复一次,而不是在程序中的任何位置进行搜索)。此外,由于此代码具有“独立意义”,因此具有执行它的功能很方便。