main函数带参数C程序设计模板2013-04-29 张宇
/* 一个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.
",para_list[j].prefix); return(-1);}else//正常收录参数{ para_list[j].ISinput=true; if(para_list[j].content_num>=(argc-i))//检测所需的参数是否没有完全输入 {printf("The "%s" incomplete.
",para_list[j].prefix);return(-1); }para_list[j].content[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!
",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.
",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