A small programming challenge.

Kevin Spencer kevin at nodecg.ncc.telecomwa.oz.au
Thu May 16 17:32:45 AEST 1991


In article <1499 at loki.une.oz.au> kevin at loki.une.oz.au (Kevin Pollard) writes:
>I have written some code to accept command line parameters and apply
>meaningful parameters - but I feel it is an interesting problem which
>must have some neat solutions.
>
>The task is:
>	allow up to 4 parameters to be entered on the command line
>	(that is, progname [ p1 [ p2 [ p3 [ p4 ] ] ] ] if you know what I mean) 
>	The program is to accept the parameters. If the a parameter
>	is missing then it is to default to the parameter is to 
>	default to the one before it.
>	(that is, if  progname x y z   is entered, then the 4th parameter
>	 is to default to z)
>	and so on down to the first parameter which is to have a hard
>	coded default. If no parameters were entered then all parmeters
>	would end up defaulting to this hard coded default.
>
>
>
>Does anyone out there know of some neat ways of doing this.
>
>This is really an algorithm problem, but since there is no algorithm
>newsgroup, and I program in C on an IBM-type machine, this would be
>a relevant newsgroup.
>
>-- 
>Kevin Pollard			Internet:	kevin at loki.une.oz.au
> University of NewEngland
>	Northern Rivers		Phone:		+61 (066) 203694
>Lismore NSW Australia		"My brain hurts"

----- Solution 1 -----
#include <stdio.h>

#define PAR(n) (n < argc) ? argv[n] : argv[argc-1])

main(argc,argv)
	int		argc;
	char	**argv;
{
	int		i;

	for (i=1; i<5; i++) puts(PAR(i));
}

----- Solution 2 -----
#include <stdio.h>
#include <string.h>

static char *args[4];

main(argc,argv)
	int		argc;
	char	**argv;
{
	int		i;

	for (i=1; i<4; i++)
		args[i] = (i<argc ? argv[i] : argv[argc-1]);

	for (i=0; i<4; i++) puts(args[i]);
}

----------------------

Solution 1 is shorter, but references to PAR must be in main, or argc and
argv must be globally referenceable.
Solution 2 is more robust, but more complicated.

-- 
-----------------------------------///-----------------------------------------
Kevin Spencer (09) 420 8173       /// Insert profound gem of wisdom here...
kevin at ncc.telecomwa.oz.au     \\\///
-------------------------------\XX/--------------------------------------------



More information about the Comp.std.c mailing list