第06天 带菜单的终端程序

视频讲解

今天要学习的案例对应的源代码目录:src/chapter02/ks02_05。本案例不依赖第三方类库。程序运行效果如图2-22所示。

图2-22 第06天案例程序运行效果

今天的目标是掌握如下内容。

  • 在终端程序中展示帮助菜单。
  • 从终端获取用户输入并处理。

当程序以终端方式运行时,最常用的人机交互手段就是用户从终端输入命令,程序响应命令并输出反馈信息。为了方便用户获取可用的命令文本,可以使用菜单来展示这些命令,如图2-22所示。封装printMenu()接口用来在终端中显示帮助菜单,见代码清单2-11。

代码清单2-11

如代码清单2-12所示,封装CommandProc()接口用来处理人机交互。为了接收用户输入,需要用到strcmp(),因此需要引入string.h头文件,见标号①处。在标号②处定义变量g_bProcRun,在CommandProc()中用它来控制程序是否继续运行。当程序以终端方式运行时,需要防止其他用户利用write指令将信息显示在当前程序的运行终端,因为这会导致本终端显示的信息杂乱,在标号③处,调用系统命令“mesg n”可以防止出现这种情况。在标号④处,启动循环来检测用户输入。在标号⑤处,将用户在终端输入的内容存入strInput以便进行识别。从标号⑥处开始,建立多个分支用来判断用户输入的命令,当用户输入某个命令后,程序作出响应,并输出信息到终端。如标号⑦处所示,如果用户希望终止程序的运行,可以输入exit,程序将g_bProcRun设置为false,并调用exit(0)正常退出程序,此时并不会执行随后的break语句。如果需要指明程序属于非正常退出,可以调用exit(1)。

代码清单2-12

最后,在main()函数中调用CommandProc()即可,见代码清单2-13中标号①处。

代码清单2-13