无论是操作系统中的很多命令,还是很多科学计算程序,都会存在参数输入,形如:
mybin -a10 -b100.0/23.0 infile
在C语言中,主要通过main函数的输入参数int argc
与char **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
代码段
网友评论