大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C技巧 > 如何使用getopt()函数解析参数

如何使用getopt()函数解析参数(2)

关键词:getopt  阅读(1068) 赞(13)

[摘要]本文是对如何使用getopt()函数解析参数的讲解,对学习C编程技术有所帮助,与大家分享。
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 
 typedef struct parameter
 {
     int       a;        //参数a
     int       b;        //参数b
     char *b_pri;    //参数b的关联值
     int       c;        //参数c
     char *c_pri;    //参数c的关联值
 }par;
 
 
 int main( int argc, char **argv )
 {
     int i;        //循环变量
     par opt;    //参数
     int flag = 0;    //循环退出标志位
 
     //参数初始化
     opt.a = 0;
     opt.b = 0;
     opt.b_pri = NULL;
     opt.c = 0;
     opt.c_pri = NULL;
     opterr = 0;    //getopt不输出错误参数
 
     //参数检测
     if (argc == 1)
     {
         printf("您没有设置选项!\n");
         exit(0);
     
     }
     //输出未处理的参数
     printf("系统传入的参数为:");
     for ( i = 1; i < argc; i++)
     {
         printf("%s ",argv[i]);
     }
     printf("\n");
 
     //循环处理传入参数
     while(flag != -1)
     {
         //调用getopt处理参数
         switch(getopt( argc, argv, "ab:c::"))
         {
             case 'a':
                 opt.a = 1;
                 break;
             case 'b':
                 opt.b = 1;
                 opt.b_pri = optarg;
                 break;
             case 'c':
                 opt.c = 1;
                 opt.c_pri = optarg;
                 break;
             case '?':
                 printf("出现非正常选项:%c\n",optopt);
                 break;
             case -1:
                 flag = -1;
                 break;
             default:
                 break;
         }
     }
 
     if( optind != argc)
     {
         printf("参数中非程序选项的有:");
         for (i = optind; i < argc; i++)
         {
             printf("%s\t",argv[i]);
         }
         printf("\n");
     }
 
     //输出解析结果
     printf("解析到程序启动后启用的选项有:");
     if (opt.a == 1)
         printf("a,");
     if (opt.b == 1)
         printf("b(参数为:%s),",opt.b_pri);
     if (opt.c == 1)
         printf("c(参数为:%s),",opt.c_pri);
     printf("\n");
 
 
     //处理后,输出全部参数与原来对比
     printf("使用getopt后,系统参数变为为:");
     for ( i = 1; i < argc; i++)
     {
         printf("%s ",argv[i]);
     }
     printf("\n");
 
     return 0;
 }

这样的话,上面同样的参数下,运行结果如下:

$ ./a.out -a -b 123 3 22 -h -c1
系统传入的参数为:-a -b 123 3 22 -h -c1 
出现非正常选项:h
参数中非程序选项的有:3    22    
解析到程序启动后启用的选项有:a,b(参数为:123),c(参数为:1),
使用getopt后,系统参数变为为:-a -b 123 -h -c1 3 22 

ok了,其实还有一个比getopt更好的一个选择,就是getopt_long,它可以支持长选项,因为这篇博文呢针对getopt的,所以我就不多做介绍,大家可以查man手册,或者等待我不知道什么时候的下次更新吧。

«上一页12下一页»


相关评论