c++ 的参数解析方法: getopt

C++ 中自带了一个参数解析方法: getopt(int argc, char *const *argv, const char *shortopts),用于处理向main函数传入的数据

表头文件 #include

函数的几个参数分别代表着:

int argc:参数的个数,等同于 main(int argc, char* argv[ ] )中的第一个参数

char *const *argv:参数数组,等同于 main(int argc, char* argv[ ] )中的第二个参数

const char *shortopts:解析格式。

主要讲解一下 shortopts 这个参数:

假设我们传入到main函数的参数是  -f xxx.txt -s -t

那么我们需要给入到getopt函数的shortopts变量值就应该是:  f:st

于是main函数就会知道: 参数f被输入了,其带有一个值是 xxx.txt

                                              参数s被输入了,不需要附带一个值

                                              参数t被输入了,也不需要附带一个值 

现在将shortopts分为两部分来看,一部分是冒号 “:”,另一部分是单个字符,例如: u,f,a,s,r,t

每一个字符表示一个参数,当你在传入 -x(x表示一个字符) 的时候,getopt方法就可以匹配到这个x

而每一个冒号则表示,冒号前面的这个参数,需要附带一个值,例如  -f xxx.txt 


使用的代码如下:

                opterr = 0; //头文件中自带的一个全局变量,用于循环参数
		char ch;
                //循环取出参数,然后进行匹配。如果有附加值的,使用 optarg 读取
               //如果switch中case到了某个字符,表示输入的参数中,包含了 -x 参数
               //options 是我自定义的一个类,用于存储参数值,判断是否启用了某个参数,以及其附带的值
		while( (ch = getopt(argc,argv, “u:f:asr:t” ) ) != -1){
			switch(ch){
			case 'u':
				options.getURL = true;
				options.Url = optarg;
				break;
			case 'f':
				options.getFromFile = true;
				options.fileName = optarg;
				break;
			case 'a':
				options.getALL = true;
				break;
			case 's':
				options.runScript = true;
				break;
			case 'r':
				options.checkScript = true;
				options.ruleFile = optarg;
				break;
			case 't':
				options.showTime = true;
				break;
			}
		}



你可能感兴趣的:(c++学习笔记,c++)