C 解析多参数行

C 解析多参数行,c,parsing,command-line-arguments,getopt,C,Parsing,Command Line Arguments,Getopt,实际上我遇到了麻烦,我想解析多个参数行,如下所示: ./a.out -a 0 L ./a.out -ab ./a.out -abc 我试着用getopt做,但没有成功。事实上,我不能像这样处理多重参数 ./a.out -abc ./a.out -edg 有没有办法用getopt这样的函数实现我想要的功能 或者我应该考虑做(GETOPT): “a::”使用可选参数生成-a-a本身设置选项标志以获取两个独立的参数-带有附加选项的aopt接受opt #include <stdio.h>

实际上我遇到了麻烦,我想解析多个参数行,如下所示:

./a.out -a 0 L
./a.out -ab
./a.out -abc
我试着用getopt做,但没有成功。事实上,我不能像这样处理多重参数

./a.out -abc
./a.out -edg
有没有办法用getopt这样的函数实现我想要的功能

或者我应该考虑做(GETOPT):

“a::”使用可选参数生成-a-a本身设置
选项
标志以获取两个独立的参数-带有附加选项的aopt接受
opt

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

int main(int argc, char *argv[])
{
    int c = 0;
    int each = 0;
    int options = 0;

    if ( !( argc == 2 || argc == 4)) {
        fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
        return 1;
    }
    while((c = getopt(argc, argv, "a::")) != -1) {

        switch(c) {
            case 'a':
                if ( optarg) {// -aopt
                    printf ( "%s\n", optarg);
                }
                else {
                    options = 1;// -a by itself
                }
                break;
            default:
                fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
                return 1;
        }
    }
    if ( optind + 2 == argc) {
        if ( options) {
            for ( each = optind; each < argc; each++) {
                if ( ( argv[each][0] != '-')) {
                    printf ( "found argument %s\n", argv[each]);
                }
            }
        }
        else {
            fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
            return 1;
        }
    }

    return 0;
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
int c=0;
int各=0;
int选项=0;
如果(!(argc==2 | | argc==4)){
fprintf(stderr,“用法:\t%s-aopt\n或\n\t%s-a opt1 opt2\n”,argv[0],argv[0]);
返回1;
}
while((c=getopt(argc,argv,“a:”)!=-1){
开关(c){
案例“a”:
if(optarg){/-aopt
printf(“%s\n”,optarg);
}
否则{
选项=1;//-a本身
}
打破
违约:
fprintf(stderr,“用法:\t%s-aopt\n或\n\t%s-a opt1 opt2\n”,argv[0],argv[0]);
返回1;
}
}
if(optind+2==argc){
如果(选项){
for(each=optind;each
尝试使用getopt时遇到了什么问题?问题是:“./a.out-a 0 J”是我的程序的第一个选项,它包含两个参数。“/a.out-abc”是另一个选项,它不接受“-”后面的参数所包含的任何内容。所以我的问题是,我实际上无法将这两个参数结合起来来解析我的命令行。为什么需要两个参数?为什么不使用不同的语法?i、 e:“./a-a0,J-abc”关于参数:“./a.out-a0”用于读取数据库中的特定条目(带有参数,它将返回0条目)。当“/a.out-ab”返回数据库中的所有条目时,“J”代表什么?这正是我想要的,非常感谢!!
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int c = 0;
    int each = 0;
    int options = 0;

    if ( !( argc == 2 || argc == 4)) {
        fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
        return 1;
    }
    while((c = getopt(argc, argv, "a::")) != -1) {

        switch(c) {
            case 'a':
                if ( optarg) {// -aopt
                    printf ( "%s\n", optarg);
                }
                else {
                    options = 1;// -a by itself
                }
                break;
            default:
                fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
                return 1;
        }
    }
    if ( optind + 2 == argc) {
        if ( options) {
            for ( each = optind; each < argc; each++) {
                if ( ( argv[each][0] != '-')) {
                    printf ( "found argument %s\n", argv[each]);
                }
            }
        }
        else {
            fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
            return 1;
        }
    }

    return 0;
}