在控制台程序中,参数传递有两种模式:
app.exe -x -n 模式
app.exe -xn 模式
以下程序,可适用与以上两种模式的识别。
#include <stdio.h>
#include <stdlib.h>  //exit()头文件
int main(int argc,char *argv[])
{
	int c,x_Chosen = 0,n_Chosen = 0;
	bool bRet = true;
	//参数传递模式:*.exe -x -n (或) *.exe -xn均可用
	while(--argc > 0 && (*++argv)[0] == ‘-‘)  //*++argv == argv[1],为char*
		while(c = *++argv[0])  //此时的argv[0]为argv[1][0] == ‘-‘
			switch(c)
		{
			case ‘x‘:
				x_Chosen = 1;
				break;
			case ‘n‘:
				n_Chosen = 1;
				break;
			default:
				printf("find:illegal option %c\n",c);
				argc = 0;
				bRet = false;
				break;
		}
		
		
		if(argc == 0)
			printf("-xn后不带参数了\n");
		else if(argc == 1)
			printf("-xn后还带有一个参数\n");
		else
			printf("-xn后还带有不止一个参数\n");
		if(!bRet)
			//Terminate the app
			exit(0);
		return 0;
}注:*++argv是一个指向参数字符串的指针,因此(*++argv)[0]是它的第一个字符(另一种有效形式是**++argv)。因为[]与操作数的结合优先级比*和++高,所以在上述表达式中必须使用圆括号,否则编译器将会把该表达式当作*++(argv[0])。
当参数较多时,可以采用位运算方法来识别传递进来的参数:
#define PARAM_T (1<<0) //-t
#define PARAM_X (1<<1) //-x
#define PARAM_N (1<<2) //-n
//假设传递 -tx,则:
int nParamTotal = PARAM_T | PARAM_X ;
本文出自 “whatever957” 博客,请务必保留此出处http://whatever957.blog.51cto.com/6835003/1636162
原文:http://whatever957.blog.51cto.com/6835003/1636162