實驗一、指令解釋程式的編寫
一、 實驗目的
(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語言對檢索調用函數的使用,對以往大一的編寫函數進行回憶和加深使用,在寫解釋程式中,從剛開始的一味用代碼進行文字資料輸出,到調用數組和循環來化簡代碼量,達到一緻的效果。