在控制台程序中,参数传递有两种模式:
- 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 ;
时间: 2024-11-05 06:30:11