将menu设计为可重用的子系统

这篇博客对应线上课程第七次实验。

网易云课堂:http://mooc.study.163.com/learn/USTC-1000002006?tid=1000081002#/learn/announce
实验楼:https://www.shiyanlou.com/courses/122
代码库:http://git.shiyanlou.com/chenxu/shiyanlou_cs122

为menu设置接口

需要添加两个函数MenuConfig,ExecuteMenu用于添加命令和运行menu程序;另外需要HandleArgv处理命令字符串集,再传给执行命令的具体函数。

  • MenuConfig函数
    主要是对前几次实验的initMenu函数进行抽象,使它能重用。内容可参见实验截图2。在第一次添加menu命令时会自动添加help命令。
  • ExecuteMenu函数
    这个函数是对原来的main函数的重写,这里添加了对命令参数的支持,对输入的字串进行处理,处理的方法见HandleArgv函数。
  • HandleArgv函数
    内容见实验截图1。主要是使用strtok对传入的字串进行分割,再返回分割后的字串和子串个数。需要注意的是要在整个字串后面加一个’\0’,否则在之后使用getopt函数时会把回车当做一个命令参数。

Makefile

编写MakeFile可以实现自动化编译,编写完成后,使用make命令,gcc可以按照设置进行编译连接生成运行文件。Makefile内容见截图4.

处理命令参数

这里使用了

while ((ch = getopt(argc,argv,optstr)) != -1)  
    {  
        switch(ch)  
        {  
            case 'a':
                ShowAllCmd(head);
                break;  
            case 'd':
                p = (tDataNode*)SearchLinkTableNode(head, SearchCondition, optarg);
                if ( p == NULL)
                {
                    printf("Without this cmd!\n");
                    break;
                }
                printf("%s - %s\n", p->cmd, p->desc);
                break;  
            default:
                printf("-a    show all cmd\n");
                printf("-d [] show specify cmd\n");
        }  
    }

while循环内getup会遍历命令字符串内容,会返回-之后的参数,同时将该选项的参数保存在optarg中(没有就设为NULL),再通过switch匹配对应参数选项的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值