C程序的输入参数(int argc, char **argv)

2019-01-12  本文已影响0人  AibWang

无论是操作系统中的很多命令,还是很多科学计算程序,都会存在参数输入,形如:
mybin -a10 -b100.0/23.0 infile
在C语言中,主要通过main函数的输入参数int argcchar **argv来控制(其它编程语言也是相同或相似的操作)

int main(int argc, char **argv){
    int innum = 0;
    int i;
    int error = 0;
    float evla, evlo, evdep, evmag;
    float stla, stlo;
    int outflag;
    char inputfile[256];
    
    // get input para
    for(i=1; i<argc; i++){
          if(argv[i][0] == '-') {
              switch(argv[i][1]) {
                 case 'L':
                    sscanf(&argv[i][2],"%f/%f/%f/%f",&evla,&evlo,&evdep,&evmag);
                    break;
                  case 'S':
                      sscanf(&argv[i][2],"%f/%f",&stla,&stlo);
                      break;
                  case 'F':
                      sscanf(&argv[i][2],"%d",&outflag);
                      break;
                 default:
                      error = 1;
                      break;
            }
        }
    }
    if(argc < 5 || error == 1){
        fprintf(stderr, "Usage: mybin -L(evla/evlo/evdp/mag) -S(stla/stlo) -F(flag) INPUT.in\n");
        return -1;
    }
    //
    strcpy(inputfile,argv[5]);
}

上述代码段实现了读取4个输入参数段的过程,四个参数对应的argc为什么等于5呢?这是因为argv[0]为程序的路径和名称,在for(i=1; i<argc; i++)中,i是从1开始取的

上述使用'switch'语句读取参数,并不要求参数段按照上述读取顺序排列,而是可以随意调换的,但是要求每个参数段都是以-作为起始标识,如果参数关键字argv[i][1]不在L, S, F三个中的一个,那么输入参数段的格式不对,此时error=1

最后一个参数必须是输入文件,该参数段就是一个字符串,并没有以-为起始标识,所以会进入switch代码段

上一篇下一篇

猜你喜欢

热点阅读