Opciones de la línea de comandos--> parámetros de main

Iniciado por ++c, 2 Octubre 2014, 23:49 PM

0 Miembros y 1 Visitante están viendo este tema.

++c

Hola amigos tengo una duda creando una calculadora a través de la línea de comandos.

El problema es que nunca se me cumple el parámetro argc[] como número entero indicando el valor del total de argumentos que he introducido por teclado.

Por consola introduzco por ejemplo:

Citar
.\main 4+2

Citar
Pienso introduzco 4 parámetros:

- argv[0] --> main
- argv[1] --> 4
- argv[2] --> +
- argv[3] --> 2



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[]) {
int a,b,c;
printf("\nargc vale %d",argc);
if(argc==4){
        sscanf(argv[1],"%d",&a);
sscanf(argv[2],"%d",&b);
sscanf(argv[3],"%d",&c);

            switch(b){

                case '+':
                    printf("La suma de %d+%d = %d\n",a,c,a+c);
                break;

                case '-':
                    printf("La resta de %d-%d = %d\n",a,c,a-c);
                break;

                 case '/':
                    printf("La division de %d/%d = %d",a,c,a/c);
                break;

                case '*':
                    printf("La multiplicacion de %d*%d = %d",a,c,a*c);
                break;

                default:
                    printf("Introduzca una opcion valida\n");
            }
}

else
        printf("No hay suficientes datos\n");

    return 0;
}



Gracias!!

rir3760

El error en el programa se debe a que tratas de leer el operador como si fuera un entero:
sscanf(argv[2],"%d",&b);

No es necesario, en su lugar puedes utilizar directamente el primer carácter de ese argumento para controlar el bucle, de esta forma:
switch(argv[2][0]){
case '+':
   printf("La suma de %d+%d = %d\n",a,c,a+c);
   break;
case '-':
   printf("La resta de %d-%d = %d\n",a,c,a-c);
   break;
case '/':
   printf("La division de %d/%d = %d",a,c,a/c);
   break;
case '*':
   printf("La multiplicacion de %d*%d = %d",a,c,a*c);
   break;
default:
   printf("Introduzca una opcion valida\n");
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

++c

#2
+10 rir3760 Grande !!

Me ha encantado la forma de leer esos caracteres como me has indicado, tomo nota  ;D

Recoloco el código completo de como quedaría :


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[]) {
int a,c;
if(argc==4){
       sscanf(argv[1],"%d",&a);
sscanf(argv[3],"%d",&c);

           switch(argv[2][0]){

               case '+':
                   printf("\nLa suma de %d+%d = %d\n",a,c,a+c);
               break;

               case '-':
                   printf("\nLa resta de %d-%d = %d\n",a,c,a-c);
               break;

                case '/':
                   printf("\nLa division de %d/%d = %d",a,c,a/c);
               break;

               case '*':
                   printf("\nLa multiplicacion de %d*%d = %d",a,c,a*c);
               break;

               default:
                   printf("\nIntroduzca una opcion valida\n");
           }
}

else
       printf("No hay suficientes datos\n");

   return 0;
}


Por cierto también desconocía que el operador * estaba reservado en bash, he tenido que engañarle de esta manera:

./main a \* c

Gracias de nuevo!!  :D