高软实验七报告

来源:互联网 发布:yum update 卡住 编辑:程序博客网 时间:2024/06/06 18:24

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

一、实验要求

  • menu 子系统设计接口,并写用户范例代码来实现原来的功能
  • 使用 makemake clean 来编译程序和清理自动生成的文件
  • 使 menu 子系统支持带参数的复杂命令,并在用户范例代码中自定义一个带参数的复杂命令(这个视频中没有给出,请自行完成)
  • 可以使用 getopt 函数获取命令行参数

二、实验思路与过程

  • 利用 mkdir 命令新建 lab7 文件夹,并使用 cp 命令将上上次的文件拷贝到 lab7
  • 查看源代码,理清思路,将整个 menu 系统模块化,并编写用户范例代码 test.c 来实现以前的小菜单的功能
  • 参照视频,编写 Makefile 文件以进行自动编译和清理中间文件
  • 改进程序,以使得程序能够支持自定义的,带参数的命令
  • 自定义带参数的命令
  • 对程序中新增加的代码进行模块化,以使得整个系统更易于维护和修改

三、关键代码

menu.c

test.c


四、运行结果


五、实验中遇到的问题

  • 在编写 得到命令行参数的函数过程中,需要返回两个值,argvargc,而函数只能返回一个值,这就产生了矛盾。最后通过指针得到了解决
  • 对于老师所用的 fgets 函数有过疑问,不明白最后为什么要去掉 \n,最后经过实验发现,scanf 函数在将用户输入的字符串存储到内存中时,会自动将用户执行命令时 输入的\n 删除,而 fgets 函数则不会删除,它会将所有的输入字符存储到内存中去,这也是为什么我们要在代码中实现去掉\n 的原因
  • strtok函数在调用时出错,经过查阅资料发现,由于 strtok 函数会改变原始字符串的内容,因此在第一次调用的时候,传递给该函数的第一个参数——即要分割的原始字符串——不能是指向字符常量的指针,比如char * p = "Original string to be divided" 就不能作为第一个参数传递进去。第一个参数只能是一个字符数组的首地址,比如char p[] = "Original string to be divided" 就可以作为待分割的字符串传递进去


六、实验心得

  • 这次实验所花的时间还是不短的,但是通过这次实验,我也学到了不少的东西,也有一部分知识还有待进一步学习,比如说 makefile
  • 对于软件工程这一概念有了新的认识,尤其是其中的重用模块化 的思想
  • 对于C语言的字符指针这一块有了更深入的理解


原创粉丝点击