高软实验七
来源:互联网 发布:海上钢琴师知乎 编辑:程序博客网 时间:2024/06/08 16:11
高软实验七
GitHub仓库地址
学号:SA17225491 姓名:张佳伟
实验目的
- 为menu程序创建子程序接口,增强menu程序的可重用性。
- 学会创建Makefile工程文件,使得编译连接更加程序化。
- 学会利用命令行的argc,argv参数,构建可以输入带参数的命令。
实验步骤
- 创建menu.h文件,并定义menu子程序的两个接口分别为MenuConfig与ExecuteMenu。其中MenuConfig用来配置命令,ExecuteMenu用来执行命令行菜单 。
//add cmd to menu;int MenuConfig(char* cmd, char* desc, int (*handler)(int argc, char* argv[]));//Menu Engine Execute;int ExecuteMenu();
2.实现MenuConfig和ExecuteMenu接口
int MenuConfig(char* cmd, char* desc, int (*handler)(int argc, char* argv[])){ tDataNode* pNode = NULL; if(head == NULL){ head = CreateLinkTable(); pNode = (tDataNode*)malloc(sizeof(tDataNode)); pNode->cmd = "help"; pNode->desc = "Menu List:"; pNode->handler = Help; AddLinkTableNode(head,(tLinkTableNode *)pNode); } pNode = (tDataNode*)malloc(sizeof(tDataNode)); pNode->cmd = cmd; pNode->desc = desc; pNode->handler = handler; AddLinkTableNode(head, (tLinkTableNode *)pNode); return 0;}//ExecuteMenu取代原来的main函数;int ExecuteMenu(){ while(1) { int argc = 0; char cmd[CMD_MAX_LEN]; printf("input an cmd number>"); //scanf("%s", cmd); char* argv[CMD_MAX_ARV_NUM]; char* pcmd = NULL; pcmd = fgets(cmd,CMD_MAX_LEN,stdin); if(pcmd == NULL) { continue; } pcmd = strtok(pcmd, " "); while(pcmd !=NULL && argc < CMD_MAX_ARV_NUM) { argv[argc] = pcmd; argc++; pcmd = strtok(NULL," "); } if(argc == 1) { int len =strlen(argv[0]); *(argv[0]+len-1)='\0'; } tDataNode* p=(tDataNode*)SearchLinkTableNode(head, SearchCondition, (void*) argv[0]); if(p == NULL) { printf("this is a wrong cmd\n"); continue; } printf("%s,%s", p->cmd, p->desc); if(p->handler != NULL) { p->handler(argc, argv); } }}
3.创建Makefile工程文件
ALL: gcc menu.c linktable.c -o menu
4.利用命令行参数实现带参的命令。并以test命令为例。
int Test(int argc, char* argv[]){ int ch; opterr = 0; while((ch = getopt(argc,argv,"abc"))!= -1) { switch(ch) { case 'a': printf("option a:a\n"); break; case 'b': printf("option b:b\n"); break; default: printf("other option :c"); } //printf("optopt +%c\n",optopt); } return 0;}
实验演示
如图所示当输入test -a 时,输出为option a:a
而在命令行输入test -b 时,输入为option b:b
实验心得
通过这次实验让我了接到了,重构的重要性,每一次在源代码上的改进,都使得原先的代码更加通用,增加了代码的可重用性。也了解到了linux的Makefile配置文件的使用,立即如何试用getopt()函数来获得命令行传来的参数,并加以处理。
阅读全文
0 0
- 高软实验七
- 高软实验七报告
- 17高软实验七报告
- 高软实验
- 高软实验五
- 【实验报告】高软实验1
- 【实验报告】高软实验2
- 【实验报告】高软实验3
- 【实验报告】高软实验4
- 【实验报告】高软实验5
- 【实验报告】高软实验7
- 实验七
- 实验七
- 实验七
- 实验七
- 实验七
- 实验七:OSPF实验
- 高软实验一报告
- 虚拟机局域网映射方法
- js模糊查找对象引用
- 算法之动态规划
- 2.3.2队列的链表存储实现
- 【spring源码分析】加载bean过程(2)
- 高软实验七
- 字符串重点
- oracle函数listagg()
- 深度学习入门
- 第6章 异常的捕获及处理
- leetcode第二题-----Reverse Integer
- 排序算法
- varnish
- Linux系统-常用的网络测试命令