標籤:
實驗一、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退出”,並退出輸入,此時按任意鍵可退出顯示。
1009實驗一 認識DOS