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