标签:int argc char *argv[] -x -n -xn
在控制台程序中,参数传递有两种模式:
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
标签:int argc char *argv[] -x -n -xn
原文地址:http://whatever957.blog.51cto.com/6835003/1636162