elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Opciones de la línea de comandos--> parámetros de main
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Opciones de la línea de comandos--> parámetros de main  (Leído 2,108 veces)
++c

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Opciones de la línea de comandos--> parámetros de main
« en: 2 Octubre 2014, 23:49 pm »

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


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main (int argc, char *argv[]) {
  6. int a,b,c;
  7. printf("\nargc vale %d",argc);
  8. if(argc==4){
  9.        sscanf(argv[1],"%d",&a);
  10. sscanf(argv[2],"%d",&b);
  11. sscanf(argv[3],"%d",&c);
  12.  
  13.            switch(b){
  14.  
  15.                case '+':
  16.                    printf("La suma de %d+%d = %d\n",a,c,a+c);
  17.                break;
  18.  
  19.                case '-':
  20.                    printf("La resta de %d-%d = %d\n",a,c,a-c);
  21.                break;
  22.  
  23.                 case '/':
  24.                    printf("La division de %d/%d = %d",a,c,a/c);
  25.                break;
  26.  
  27.                case '*':
  28.                    printf("La multiplicacion de %d*%d = %d",a,c,a*c);
  29.                break;
  30.  
  31.                default:
  32.                    printf("Introduzca una opcion valida\n");
  33.            }
  34. }
  35.  
  36. else
  37.        printf("No hay suficientes datos\n");
  38.  
  39.    return 0;
  40. }
  41.  
  42.  

Gracias!!


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Opciones de la línea de comandos--> parámetros de main
« Respuesta #1 en: 3 Octubre 2014, 03:38 am »

El error en el programa se debe a que tratas de leer el operador como si fuera un entero:
Código
  1. 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:
Código
  1. switch(argv[2][0]){
  2. case '+':
  3.   printf("La suma de %d+%d = %d\n",a,c,a+c);
  4.   break;
  5. case '-':
  6.   printf("La resta de %d-%d = %d\n",a,c,a-c);
  7.   break;
  8. case '/':
  9.   printf("La division de %d/%d = %d",a,c,a/c);
  10.   break;
  11. case '*':
  12.   printf("La multiplicacion de %d*%d = %d",a,c,a*c);
  13.   break;
  14. default:
  15.   printf("Introduzca una opcion valida\n");
  16. }

Un saludo


En línea

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

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: Opciones de la línea de comandos--> parámetros de main
« Respuesta #2 en: 3 Octubre 2014, 21:22 pm »

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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main (int argc, char *argv[]) {
  6. int a,c;
  7. if(argc==4){
  8.        sscanf(argv[1],"%d",&a);
  9. sscanf(argv[3],"%d",&c);
  10.  
  11.            switch(argv[2][0]){
  12.  
  13.                case '+':
  14.                    printf("\nLa suma de %d+%d = %d\n",a,c,a+c);
  15.                break;
  16.  
  17.                case '-':
  18.                    printf("\nLa resta de %d-%d = %d\n",a,c,a-c);
  19.                break;
  20.  
  21.                 case '/':
  22.                    printf("\nLa division de %d/%d = %d",a,c,a/c);
  23.                break;
  24.  
  25.                case '*':
  26.                    printf("\nLa multiplicacion de %d*%d = %d",a,c,a*c);
  27.                break;
  28.  
  29.                default:
  30.                    printf("\nIntroduzca una opcion valida\n");
  31.            }
  32. }
  33.  
  34. else
  35.        printf("No hay suficientes datos\n");
  36.  
  37.    return 0;
  38. }
  39.  
  40.  
Por cierto también desconocía que el operador * estaba reservado en bash, he tenido que engañarle de esta manera:
Código:
./main a \* c
Gracias de nuevo!!  :D
« Última modificación: 3 Octubre 2014, 21:29 pm por ++c » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
!!! Help Linea de comandos diferentes opciones !!!
Programación C/C++
Garfield07 9 3,256 Último mensaje 20 Noviembre 2010, 21:33 pm
por Garfield07
Parámetros en main y función Sleep()
Programación C/C++
Saberuneko 5 4,948 Último mensaje 14 Junio 2012, 16:07 pm
por 0xDani
paso de parametros a la funcion main y archvos pbm « 1 2 »
Programación C/C++
kikian94 10 5,815 Último mensaje 24 Noviembre 2013, 18:26 pm
por kikian94
[VBS] Utilizar parámetros desde línea de comandos?
Scripting
Hartwell 4 4,267 Último mensaje 16 Agosto 2014, 23:21 pm
por Hartwell
Problema con parámetros que recibe main(int argc, char *argv[])
Programación C/C++
antkk 1 2,440 Último mensaje 6 Junio 2015, 14:08 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines