C语言库函数---getopt、getopt_long

/*
getopt 练习
写一个函数,接受五个参数,
分别为:姓名、性别、年龄、身高、爱好
最后将这些信息打印出来,参数适用结构传递
*/

#include <stdio.h>
#include <unistd.h>

typedef struct info{
    char *name;
    char *sex;
    int age;
    int tall;
    char *hobby;
}all_infos;

all_infos wangdan={
    .name = NULL,
    .sex = NULL,
    .age = 0,
    .tall = 0,
    .hobby = NULL,
};

static int get_option(int argc,char **argv);

int main(int argc,char *argv[])
{
    get_option(argc,argv);
    
    printf("name is : %s\n",wangdan.name);
    printf("sex is : %s\n",wangdan.sex);
    printf("age is : %d\n",wangdan.age);
    printf("tall is : %d\n",wangdan.tall);
    printf("hobby is : %s\n",wangdan.hobby);
}

static int get_option(int argc,char **argv)
{
    int ch = 0;
    char *optstr = NULL;
    
    opterr = 0;
    optstr = "n:s:a:t:h:";
    while((ch = getopt(argc,argv,optstr)) != -1){
        switch(ch){
            case 'n':
                wangdan.name = optarg;
                break;
            case 's':
                wangdan.sex = optarg;
                break;
            case 'a':
                wangdan.age = atoi(optarg);
                break;
            case 't':
                wangdan.tall = atoi(optarg);
                break;
            case 'h':
                wangdan.hobby = optarg;
                break;
            default:
                printf("Please check parameter!\n");
                break;
        }
    }
    return 0;
}


/*
getopt_long 练习
编写一个函数,输入参数分别为:姓名,性别,年龄,身高,爱好
最后将输入的参数分别打印出来
*/
#include <stdio.h>
#include <getopt.h>

typedef struct info{
    char *name;
    char *sex;
    int age;
    int tall;
    char *hobby;
}all_infos;

all_infos wangdan={
    .name=NULL,
    .sex=NULL,
    .age=0,
    .tall=0,
    .hobby=NULL,
};

static int get_option(int argc,char **argv);

int main(int argc,char **argv)
{
    get_option(argc,argv);
    
    printf("name is %s\n",wangdan.name);
    printf("sex is %s\n",wangdan.sex);
    printf("age is %d\n",wangdan.age);
    printf("tall is %d\n",wangdan.tall);
    printf("hobby is %s\n",wangdan.hobby);
}

static int get_option(int argc,char **argv)
{
    int ch = 0;
    int opt_index = 0;
    char * optstr = "n:s:a:t:h:";
    
    opterr = 0;
    struct option long_options[]={
        {"name",required_argument,NULL,'n'},
        {"sex",required_argument,NULL,'s'},
        {"age",required_argument,NULL,'a'},
        {"tall",required_argument,NULL,'t'},
        {"hobby",required_argument,NULL,'h'},
    };
    
    while((ch = getopt_long(argc,argv,optstr,long_options,&opt_index)) != -1){
        switch(ch){
            case 'n':
                wangdan.name = optarg;
                break;
            case 's':
                wangdan.sex = optarg;
                break;
            case 'a':
                wangdan.age = atoi(optarg);
                break;
            case 't':
                wangdan.tall = atoi(optarg);
                break;
            case 'h':
                wangdan.hobby = optarg;
                break;
            default:
                printf("parameter error!\n");
                break;
        }
    }
    
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值