[C] Specifier arguments en ligne de commande

Specifier arguments en ligne de commande [C] - Programmation

Marsh Posté le 10-12-2001 à 00:30:48    

Salut tout le monde,
Voila j'ai un petit probleme sur un de mes programmes en C.
Je voudrais pouvoir specfifier une option en ligne de commande soit '-min' ou bien '-max'. J'arrive deja a le faire avec une seule lettre style '-d' ou bien '-r' mais avec plusieurs je pense qu'il faut bidouiller (pour pas devoir utiliser des getopt_long() ).
Donc j'avais penser a faire ceci :
 

#include <stdio.h>  // for printf() & fprintf()
#include <unistd.h> // for getopt()
#include <stdlib.h>
 
 
/* Default values */
double min_value, max_value, temp_value, input;
 
void usage()
{
 fprintf(stderr, "Syntax: generator [-min] or [-max]\n" );
 fprintf(stderr, "Default option is : -max\n" );
 exit(1);
}
 
void find_max()
{
scanf("%lg", &input);
max_value=input;
while(scanf("%lg", &input)!=EOF)
 {
 temp_value=input;
 if (temp_value>max_value) { max_value=temp_value; }
 }
printf("The maximum value is : %.17lg\n", max_value);
exit(0);
}
 
void find_min()
{
scanf("%lg", &input);
min_value=input;
while(scanf("%lg", &input)!=EOF)
 {
 temp_value=input;
 if (temp_value<min_value) { min_value=temp_value; }
 }
printf("The minimum value is : %.17lg\n", min_value);
exit(0);
}
 
void command_line_params(int argc, char **argv)
 
{
 char param;
 while ((param=getopt(argc, argv, "?hm:" ))!=EOF)
 {
  switch(param)
  {
   case 'min': if (optarg=="in" ) { find_min(); }
        else { find_max(); }
        break;
   case 'h':
   case '?': usage();
       break;
  }
 }
}
 
int main(int argc, char **argv)
{
 
 
command_line_params(argc, argv);
 
find_max();
 
}

 
Mais apparemment ca veux pas marcher et pourtant que je fais un 'printf("%s", optarg)' il me retourne bien 'in' ou 'ax' suivant ce que je rentre.
Donc pourquoi le 'if' marche pas ?
 
Merci.
@+.

Reply

Marsh Posté le 10-12-2001 à 00:30:48   

Reply

Marsh Posté le 10-12-2001 à 01:41:22    

C normal :)
En c pour comparer des chaines c'est strcmp()
 
Si tu fait if (optarg=="in" ), tu compare 2 pointeurs, il n'y a pas de type chaine en c.

Reply

Marsh Posté le 10-12-2001 à 02:21:25    

Ouah c'est impeccable ca ! Merci !
 
PS : je sais ca fait pas tres pro la technique employee... si vous avez mieux et assez facile, je suis preneur :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed