/* 一個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