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!!
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
+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