/* 一个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;
}

本文转自 张宇 51CTO博客,原文链接:http://blog.51cto.com/zhangyu/159013,如需转载请自行联系原作者

main函数带参数C程序设计模板相关推荐

  1. Linux下main函数带参数问题和atoi函数详解

    1.main函数带参数 基本格式:main(int argc,char * argv[]) argc参数保存命令行参数的个数,是整形变量 具体用法可有如下代码看下: a1.c: #include &l ...

  2. main函数带参作用

    关于main函数带参的一些说明 刚开始还不知道main函数带个参数有什么用,后来发现很多可执行文件都是main函数带参的,那些带有选项的命令行命令就是这样的程序.比如ping -h,-h就是个参数. ...

  3. main函数的参数详解,它们是何时何处传入的?(main函数的参数值是从操作系统命令行上获得的)

    一般的main函数都是不带参数的,因此main 后的括号都是空括号.实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数.C语言规定main函数的参数只能有两个, 习惯上这两个参 ...

  4. c语言中argc的作用,C语言中main函数的参数argc和argv

    参考资料: C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int argc, char* arg ...

  5. main函数的参数的含义

    转载自:点击链接 链接2 加qq1126137994 微信:liu1126137994 一起学习更多技术!!! 最近学习服务器网络编程,遇到了一个问题,main函数的参数,特意整理资料记录之!!! 下 ...

  6. C++ main函数中参数argc和argv

    argc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0 ...

  7. C 中 main 函数的参数

          看到不同的人写出的 C 或者 C++ 程序时,可能会出现不一样的 main 函数的定义,下面的几种定义方式都是对的: int main(void)int main(int argc)int ...

  8. C++ main函数中参数argc和argv含义及用法( argument count和 argument vector)

    rgc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写(注意:不是argument value的缩写,自己以前理解错了), ...

  9. 【C/C++】main函数之参数argc和argv含义及用法

    初识argc和argv,对其用法甚是困惑,偶得大神"-牧野-"之总结,犹如醍醐灌顶,故转载分享如下,供更多博友学习. argc 是 argument count的缩写,表示传入ma ...

最新文章

  1. Pandas常见的数据过滤方法、通过列条件筛选行数据
  2. 大头贴计算机教程,美颜相机大头贴在哪里 教你怎么弄动漫大头贴
  3. Java截取最后一个/后面的所有字符
  4. centos7 启动流程图_Linux启动过程详解
  5. Java第一个程序Helloworld
  6. 数据结构与算法笔记(十)—— 快速排序
  7. (课程学习笔记)Python基础学习
  8. crazyradio焊接和下载固件过程
  9. python watchdog休眠_python watchdog
  10. dedecms后台崩溃或者后台访问慢的解决方法
  11. node.js 框架基本功能
  12. C++ std::set find 错误 operator中不能有<=
  13. 机器人机构学基础(朱大昌)第三章部分习题答案
  14. 韦东山第3期嵌入式Linux项目-视频监控-2-从零写USB摄像头驱动(UVC驱动)
  15. 十六进制换算成二进制、八进制、十进制
  16. exploit completed, but no session was created
  17. 计算机在哪里修改储存默认磁盘,Win7资源管理器修改默认显示磁盘小教程
  18. 开发管理---项目的范围、时间与成本
  19. 在网络世界中如何才能保护好自己的安全?
  20. 添加项目到debug调试

热门文章

  1. 该项研究降低了使用大脑信号控制机器人手臂的位置误差
  2. eeglab中文教程系列(2)-绘制脑电头皮图
  3. AI超清修复张国荣《热·情》演唱会,22年前哥哥面部和舞台极度还原,歌迷泪奔...
  4. 索尼AI CEO:我们要让AI在30年内拿到诺贝尔奖
  5. IEEE Fellow、AI大牛田奇加入华为云!他为何而来?“加速AI基础研究落地”
  6. 【PHP开发规范】继承与扩展:PSR-2 编码风格规范
  7. 【跃迁之路】【674天】程序员高效学习方法论探索系列(实验阶段431-2018.12.19)...
  8. WPF中如何将ListViewItem双击事件绑定到Command
  9. Bytom移动端钱包SDK开发基础
  10. ZooKeeper Watch Java API浅析getChildren