实验五:用callback增强链表模块来实现命令行菜单小程序V2.8

来源:互联网 发布:ofo登录 网络请求超时 编辑:程序博客网 时间:2024/06/05 21:13

实验目录

实验要求

实验过程

实验心得

实验要求

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(tLinkTableNode * 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

//SearchConditionint SearchCondition(tLinkTableNode * pLinkTableNode, void * args){    char *cmd = (char *)args;    tDataNode * pNode = (tDataNode *)pLinkTableNode;    if(strcmp(pNode->cmd, cmd) == 0)    {        return  SUCCESS;      }    return FAILURE;           }//FindCmdtDataNode* 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 lab5liuqing@liuqing-virtual-machine:~/MSE/learngit$ git commit lab5 -m "用callback增强链表模块来实现命令行菜单小程序V2.8"
liuqing@liuqing-virtual-machine:~/MSE/learngit$ git push origin master 

实验心得

使用callback机制遍历、搜索链表

通过callback机制实现了自定义函数,将该函数传递到被调函数,执行完毕再返回

对于“卧底”有了更进一步的了解




阅读全文
0 0
原创粉丝点击