实验一、DOS实验
物联网工程 张怡 201306104149
一、 实验目的
(1)认识DOS;
(2)掌握命令解释程序的原理;
(3)掌握简单的DOS调用方法;
(4)掌握C语言编程初步。
二、实验内容和要求
编写类似于DOS,UNIX的命令行解释程序。
(1)自行定义系统提示符
(2)自定义命令集(8-10个)
(3)用户输入HELP以查找命令的帮助
(4)列出命令的功能,区分内部还是外部命令
(5)用户输入QUIT退出
(6)内部命令有dir, cd, md,rd, cls, date, time, ren, copy等。
三、 实验方法、步骤及结果测试
1. 源程序名:压缩包文件(rar或zip)中源程序名1.c
可执行程序名:1.exe
2. 原理分析及流程图
这个程序主要是while(1)语句和if( )……else( )语句的嵌套使用,此外是数组的使用。将所需实现的命令存入数组cmd[20][20],然后将输入的字符串存入数组str[20],将两个数组内的字符串进行比对,若满足“strcmp(str,cmd[n])==0”,则输出数字n对应的命令及其解释,若不满足“strcmp(str,cmd[n])==0”,则提示“输入出错,请重新输入:”,直至输入的字符串与数组cmd[20][20]内的字符串对应为止,此时输出n对应的命令。若一直不输入“quit”,则每次显示上次输入的命令对应的语句时,提示“请用户输入命令:”。
3. 主要程序段及其解释:
#include<stdio.h>
#include<string.h>
main()
{
char cmd[20][20]={"dir","cd","md","rd","cls","date","time","ren","copy","help","quit"};
char str[20];//存储字符串的数组
printf("欢迎使用DOS命令解释器!\n\n");
while(1)
{
printf("\n请用户输入命令:");
gets(str); //str等于输入的字符串
if(strcmp(str,cmd[0])==0)
//比较函数,和前面的数组进行比较,相同为0不同为1,为0时输出
{
printf("dir显示磁盘目录\n");
}
else if(strcmp(str,cmd[1])==0)
{
printf("cd 进入特定的目录\n");
}
else if(strcmp(str,cmd[2])==0)
{
printf("md 创建新的目录\n");//dos下面习惯叫目录,win下面习惯叫文件夹。
}
else if(strcmp(str,cmd[3])==0)
{
printf("rd 删除文件夹\n");
}
else if(strcmp(str,cmd[4])==0)
{
printf("cls 清屏\n");
}
else if(strcmp(str,cmd[5])==0)
{
printf("date 日期设置\n");
}
else if(strcmp(str,cmd[6])==0)
{
printf("time 设置(或显示)系统时期\n");
}
else if(strcmp(str,cmd[7])==0)
{
printf("ren 文件改名\n");//ren命令的格式是:ren 源文件名目的文件名
}
else if(strcmp(str,cmd[8])==0)
{
printf("copy复制\n");
}
else if(strcmp(str,cmd[9])==0) //输入help,显示以下内容
{
printf("dir (无参数)显示磁盘目录\n");
printf("cd 进入特定的目录 \n");
printf("md 创建新的目录\n");
printf("rd 删除特定的文件夹\n");
printf("cls 清屏幕命令\n");
printf("date设置日期 \n");
printf("time设置或显示系统时期\n");
printf("ren 文件改名命令\n");
printf("copy文件复制命令\n");
printf("quit退出\n");
}
else if(strcmp(str,cmd[10])==0)
{
printf("quit退出\n");
return;}
else //与数组内字符串不同,为1,提示出错
{
printf("输入出错,请重新输入:\n");
}
}
}
4. 运行结果及分析
运行程序,有如下效果:显示“欢迎使用DOS命令解释器!”,并提示“请用户输入命令”。此处,打印“请用户输入命令”这一句的语句放在while(1)里面,使其不断提示。
输入程序的寄存数组内未设置的命令,则提示“输入出错,请重新输入:”。此处用到if( )……else( )语句,如果满足“str,cmd[n])==0”,则显示数字n对应的命令及其解释,否则提示“输入出错,请重新输入:”。
输入“help”,则显示寄存数组内设置的命令及其解释。
输入寄存数组内设置的命令,则显示该命令及其解释。
输入“quit”,则显示“quit退出”,并按任意键可退出程序。
四、实验总结
这是操作系统的第一个实验,之前并没有了解过DOS命令,因此上网查着了相关资料。DOS的内部命令有dir, cd, md,rd, cls, date, time, ren, copy等,程 序对这些命令进行了简要的解释。程序运行后,提示“欢迎使用DOS命令解释器!”和“请用户输入命令”,不了解的话可以输入“help”命令,则显示DOS命令及相关解释。
刚开始做实验的时候只有模糊的框架概念,知道可以用if(),else if()和else()语句进行编程,但思路很乱,不知具体如何实现。通过查找相关书籍以及上网浏览程序代码,发现数组可以很好的解决这个问题。于是用一个数组来存储所要用到的命令,另外用一个数组来存储刚输入的命令(字符串),然后和前面的数组进行比较,相同为0不同为1,为0时输出,为1则提示出错,要求重新输入命令。当输入“quit”命令时,提示“quit退出”,并退出输入,此时按任意键可退出显示。