实验一、命令解释程序的编写
一、 实验目的
(1)掌握命令解释程序的原理;
(2)掌握简单的DOS调用方法;
(3)掌握C语言编程初步。
二、 实验内容和要求
1、实验内容:根据教师指定的实验课题,完成设计、编码、测试工作。
2、实验要求:编写类似于DOS,UNIX的命令行解释程序
(1)自行定义系统提示符
(2)自定义命令集(8-10个)
(3)用户输入HELP以查找命令的帮助
(4)列出命令的功能,区分内部还是外部命令
(5)用户输入QUIT退出
(6)内部命令有dir, cd, md, rd, cls, date, time, ren, copy等。
三、 实验方法、步骤及结果测试
1、实验方法:运用C语言中的while循环语句来控制整个命令解释程序,在循环内运用if和else if语句,条件就利用strcmp函数进行筛选。
2、实验步骤:先定义两个字符串数组,一个存放输入的显示提示符,另一个提前定义好相关命令dir, cd, md, rd, cls, date, time, ren, copy等。然后用while循环语句嵌套if和else if语句。当输入命令正确显示此命令的解释,若输入为外部命令,显示输入错误需重新输入。
3、源代码:
1 void process(struct Cmd cm[Max]) 2 { 3 char str[10]; 4 printf("Microsoft Windows XP [版本 5.1.2600]\n"); 5 printf("(C) 版权所有 1985-2001 Microsoft Corp.\n"); 6 while(strcmp(str,"quit")!=0)//循环 7 8 { 9 printf("\nC:\\Documents and Settings\\hskd>"); 10 scanf("%s",str); 11 strlwr(str); 12 bool flag=false; 13 if(strcmp(str,"help")==0) 14 { 15 printf("有关某个命令的详细信息,请键入 HELP 命令名\n"); 16 display(cm); 17 flag=true; 18 }else{ 19 for(int i=0;i<count;i++) 20 { 21 if(strcmp(str,cm[i].cmd)==0) //比较用户输入的字符串与文件存储的关键字命令名称是否相等 22 { 23 if(cm[i].post==1) 24 { 25 printf("'%s' 内部命令输入正确!\n该命令作用是:%s\n",str,cm[i].function); 26 printf("%s\n",&cm[i].parameters); 27 } 28 else 29 { 30 printf("'%s' 外部命令输入正确!\n该命令作用是:%s\n",str,cm[i].function); 31 printf("%s",&cm[i].parameters); 32 } 33 flag=true; 34 break; 35 } 36 } 37 if(!flag){ 38 if(strcmp(str,"quit")!=0) 39 printf("'%s' 不是内部或外部命令,也不是可运行的程序\n或批处理文件。\n",str); 40 } 41 } 42 } 43 printf("\n程序结束!\n\n"); 44 }
4.运行结果及分析:
运行结果与预期一致。
四、 实验总结
在这次用C语言编写系统命令解程序中,不仅加强了对命令程序的编译思路,同时回顾了C语言对检索调用函数的使用,对以往大一的编写函数进行回忆和加深使用,在写解释程序中,从刚开始的一味用代码进行文字数据输出,到调用数组和循环来化简代码量,达到一致的效果。