实验目录
实验要求
实验过程
实验心得
实验要求
1.给lab5-1.tar.gz(在实验楼Linux虚拟机环境下~/se_files/目录下)找bug,quit命令无法运行的bug
2.利用callback函数参数使Linktable的查询接口更加通用
3.注意接口的信息隐藏
实验过程
1.将lab5-1.tar.gz解压缩,复制到~/Code/shiyanlou_cs122/lab5/目录下
liuqing@liuqing-virtual-machine:~/MSE$ cd learngit/
liuqing@liuqing-virtual-machine:~/MSE/learngit$ cd lab5
liuqing@liuqing-virtual-machine:~/MSE/learngit/lab5$ tar -zxvf lab5-1.tar.gz
./lab5.1/
./lab5.1/linktable.c
./lab5.1/linktable.h
./lab5.1/menu.c
./lab5.1/testlinktable.c
liuqing@liuqing-virtual-machine:~/MSE/learngit/lab5$ ls
lab5.1 lab5-1.tar.gz
liuqing@liuqing-virtual-machine:~/MSE/learngit/lab5$ cd lab5.1/
liuqing@liuqing-virtual-machine:~/MSE/learngit/lab5/lab5.1$ vi menu.c
2.修改quit命令无法运行的bug
SearchLinkTableNode函数中循环终止条件出错,导致没有遍历尾结点,将循环条件pNode != pLinkTable->pTail修改为pNode != NULL
tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tL
inkTableNode * pNode))
{
if(pLinkTable == NULL || Conditon == NULL)
{
return NULL;
}
tLinkTableNode * pNode = pLinkTable->pHead;
while(pNode != NULL)
{
if(Conditon(pNode) == SUCCESS)
{
return pNode;
}
pNode = pNode->pNext;
}
return NULL;
}gcc编译执行,quit命令可以正常执行。
3.提高Linktable接口通用性
主要修改几个文件中的几个函数。具体如下:
linktable.h
tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode, void * args), void * args);linktable.c
tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode, void * args), void * args)
{
if(pLinkTable == NULL || Conditon == NULL)
{
return NULL;
}
tLinkTableNode * pNode = pLinkTable->pHead;
while(pNode != NULL)
{
if(Conditon(pNode,args) == SUCCESS)
{
return pNode;
}
pNode = pNode->pNext;
}
return NULL;
}menu.c
//SearchCondition
int SearchCondition(tLinkTableNode * pLinkTableNode, void * args)
{
char *cmd = (char *)args;
tDataNode * pNode = (tDataNode *)pLinkTableNode;
if(strcmp(pNode->cmd, cmd) == 0)
{
return SUCCESS;
}
return FAILURE;
}
//FindCmd
tDataNode* FindCmd(tLinkTable * head, char * cmd)
{
return (tDataNode*)SearchLinkTableNode(head,SearchCondition, (void *)cmd);
}在lab5文件夹下编译运行:
$ gcc menu.c linkTable.c -o menu
$ ./menu
4.实验结果如图所示:
5.使用git进行代码托管,github地址 https://github.com/daipenguin/learngit/tree/master/lab5/lab5.1
liuqing@liuqing-virtual-machine:~/MSE/learngit$ git add lab5
liuqing@liuqing-virtual-machine:~/MSE/learngit$ git commit lab5 -m "用callback增强链表模块来实现命令行菜单小程序V2.8"
liuqing@liuqing-virtual-machine:~/MSE/learngit$ git push origin master
实验心得
使用callback机制遍历、搜索链表
通过callback机制实现了自定义函数,将该函数传递到被调函数,执行完毕再返回
对于“卧底”有了更进一步的了解
本文档记录了修复一个Linux环境下链表模块中的bug的过程,包括修正quit命令无法运行的问题,以及通过引入回调函数机制增强链表搜索接口的通用性。

被折叠的 条评论
为什么被折叠?



