一个C/C++ 命令行参数处理的程序

最近在学习K&R C中讲解的关于UNIX系统下运行命令的参数的讲解,其中可选参数  -x  -n  可以被-xn取代。

这种处理方法的代码非常精练,这里记录下来以后用得上


代码如下  这是一个查找输入的行中是否含有匹配字符串的命令 并且有 -x -n两个可选参数。

vs2015和gcc下编译通过

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 

#define MAXLINE		1000

int getline_s(char *line, int max);

/* print the line match the pattern with
 * the first input parameter.
 * support the optional parameter -x -n or -xn
 * before the pattern */
int main(int argc, char* argv[])
{
	char line[MAXLINE];
	long lineno = 0;
	int c, except = 0, number = 0, found = 0;

	while (--argc > 0 && (*++argv)[0] == '-')
	{
		while (c = *++argv[0])
		{
			switch (c)
			{
			case 'x':
				except = 1;
				break;
			case 'n':
				number = 1;
				break;
			default:
				printf("find: illegal optional %c\n", c);
				argc = 0;
				found = -1;
				break;
			}
		}
	}

	if (argc != 1)
		printf("Usage: find -x -n pattern\n");
	else
	{
		while (getline_s(line, MAXLINE) > 0)
		{
			lineno++;
			if ((strstr(line, *argv) != NULL) != except)
			{
				if (number)
					printf("%ld:", lineno);
				printf("%s", line);
				found++;
			}
		}
	}
	return found;
}

int getline_s(char *s, int max)
{
	int c;
	char *p = s;
	while ((c = getchar()) != EOF && c != '\n')
		*s++ = c;
	if (c == '\n')
		*s++ = c;
	*s = '\0';
	return s - p;
}


编译好以后 输入

./a.out -x -n test          可选参数


./a.out  test     忽略参数


./a.out -xn   组合参数


你可能感兴趣的:(C)