/* 一個main含參程式的C語言設計範本,只需在結構體初始化中輸入各個參數的性質及內容,就可以自動將參數分揀入結構體中。 命令執行方式如: 程式名 -a 參數1 -b 參數2 程式名 -?[-h] */ #include "stdafx.h" #define MAX_PARA 6 struct parameter { int ID;//參數編號 int content_num;//本參數後帶的選項數目 bool IShave_prefix;//暫只接受必須使用-xx之類的參數首碼。 char prefix[32]; char content[256]; bool IShave_default_c; char default_content[256]; bool ISnot_optional; bool ISinput; }; struct parameter para_list[MAX_PARA]={ // 參數編號,參數選項數目,是否有參數首碼(如-s),參數首碼,參數選項內容, // 是否存在預設值,預設值,是否必選參,是否已得到參數(根據使用者輸出才修改) {1,1,true,"-s","",false,"",true,false}, //-s {2,1,true,"-c","",false,"",true,false}, //-c {3,1,true,"-k","",false,"",true,false}, //-k {4,1,true,"-t","",true,"NORMAL",false,false}, //-t {5,1,true,"-m","",false,"",false,false}, //-m {6,1,true,"-p","",false,"",false,false} //-p }; int generate_parameter(int argc,char ** argv) { if( (argc==1) || ((argc==2) && ( strcmp(argv[1],"-h")==0 || strcmp(argv[1],"-H")==0 || strcmp(argv[1],"-?")==0 ) ) ) printf("is help"); else { int i,j,k; for(i=1;i<argc;i++) { for(j=0;j<MAX_PARA;j++) { if( strcmp(argv[i],para_list[j].prefix)==0 )//輸入的參數首碼是允許的,在列表在存在 { if(para_list[j].ISinput)//之前已經有過這個參數了。 { printf("The \"%s\" Can only input once.\n",para_list[j].prefix); return(-1); } else//正常收錄參數 { para_list[j].ISinput=true; if(para_list[j].content_num>=(argc-i))//檢測所需的參數是否沒有完全輸入 { printf("The \"%s\" incomplete.\n",para_list[j].prefix); return(-1); } para_list[j].content[0]='\0'; for(k=0;k<para_list[j].content_num;k++) sprintf(para_list[j].content,"%s%s",para_list[j].content,argv[i+1+k]); i+=para_list[j].content_num; para_list[j].ISinput=true; break;//跳出for迴圈。 } } } if(j>=MAX_PARA)//參數首碼輸入錯誤,如果存在沒有首碼的參數,應在此加入代碼 { printf("The \"%s\" is error!\n",argv[i]); return(-1); } } //下列代碼對必選參數進行檢查。 for(i=0;i<MAX_PARA;i++) { if(para_list[i].ISnot_optional==true && para_list[i].ISinput==false) //必選項未輸入 { printf("The \"%s\" must be input.\n",para_list[i].prefix); return(-1); } } } return 0; } int main(int argc, char ** argv) { if(generate_parameter(argc,argv)!=0) return -1; //使用者代碼 return 0;
本文出自 “張宇(資料恢複)” 部落格,請務必保留此出處http://zhangyu.blog.51cto.com/197148/159013