美文网首页
C程序的输入参数(int argc, char **argv)

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

作者: AibWang | 来源:发表于2019-01-12 21:11 被阅读0次

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

    • argc为输入参数的个数
    • argv为输入参数字符串,其中argv[0]为运行程序路径及名称,argv[1], argv[2], ...分别为输入参数段1,2,...
    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代码段

    相关文章

      网友评论

          本文标题:C程序的输入参数(int argc, char **argv)

          本文链接:https://www.haomeiwen.com/subject/pfacdqtx.html