[ Foro de C ]

Parámetros de main, pág.131 ejercicio 2

16-Nov-2009 19:41
Jess S.
2 Respuestas

¡Hola!
Ma costó un montón hacer el primer ejercicio de esta página, pero el segundo ha podido conmigo. A continuación pongo mi comienzo de programa que se llama calcula.

/* Argumentos de main. Nacho Cabanes pág 131 ejercicio 2*/

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

int main (int argc, char* argv[])

{
   int i=0;
   int calculo, modo=5;
   
   printf("\nParametro primero %d",atoi(argv[1]));
   printf("\nParametro segundo %c",argv[2]);
   printf("\nParametro tercero %d",atoi(argv[3]));
   
   if (atoi(argv[2]) == '+') modo=1;
   if (atoi(argv[2]) == '-') modo=2;    
   if (atoi(argv[2]) == '*') modo=3;    
   if (atoi(argv[2]) == '/') modo=4;

Si en la pantalla de DOS pongo calcula 5 + 7 o calcula 5 - 7 o calcula 5 / 7, los parámetros 1 y 3 me los pone bien (5 y 7) pero el 2 me pone el mismo símbolo en los tres casos, una D con una tilde en el palo.
Si pongo calcula 5 * 7, el primero me pone 5, el segundo en blanco y el tercero cero. ¿Qué está pasando?

No sé cómo hacer para que el programa me diferencie los cuatro símbolos y coja bien los parámetros en todos los casos.

Saludos.


17-Nov-2009 01:24
Nacho Cabanes (+30)

Haces algo un poco extraño al analizar el operador. No entiendo para qué usas "atoi", que convierte de texto a número entero, cuando tienes los símbolos +, -, *, etc.

Yo creo que es más sencillo tomarlo como letra y analizar con un "switch":

char operador;
operador = argv[2][0];

switch ( operador )
{
 case '+': ...
 ...
}


17-Nov-2009 08:35
Jess S.

¡Hola!

Muchas gracias por la rápida respuesta. Jamás se me hubiera ocurrido añadir el segundo corchete a argv para aislar el operador.

También he sustituido el operador '*' por el clásico 'x' al indicar la multiplicación, ya que me ha provocado varios problemas.

Y por último, he empleado 'atoi' porque de alguna forma tenía que transformar los operandos a enteros, y es la que me resultaba más cómoda.

El programa 'calcula' ya funciona correctamente.

Saludos.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)