程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> main函數帶參數C程序設計模板

main函數帶參數C程序設計模板

編輯:關於C語言
/* 一個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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved