Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Prolema con argumentos en main(), conversion de tipos?

Estas en el tema de Prolema con argumentos en main(), conversion de tipos? en el foro de C/C++ en Foros del Web. Hola a todos, Les escribo dado que no soy un experimentado programador en C, es mas creo que soy peor de lo que creo... pero ...
  #1 (permalink)  
Antiguo 21/03/2007, 17:23
Avatar de edi87  
Fecha de Ingreso: mayo-2004
Ubicación: Argentina
Mensajes: 113
Antigüedad: 20 años
Puntos: 0
Exclamación Prolema con argumentos en main(), conversion de tipos?

Hola a todos,

Les escribo dado que no soy un experimentado programador en C, es mas creo que soy peor de lo que creo... pero necesito ayuda con esto, dado que me meti en un compromiso sin saber las complejidades...

El problema es el siguiente, estoy manejando un placa conectada al puerto serie a traves de un programa hecho en C que encontre en la web.

El problema:
El programa que baje tiene dentro del codigo fuente los datos a enviar a la placa, yo necesito poder enviar eso a traves de parametros al programa, algo como lo siguiente:

./programa 200 150 100 21

Osea, 4 parametros (pero tambien pueden ser 3).


Otro Problema:
La placa viene con un programa de ejemplo creado en visual basic, en el cual estos numeros los envia formateados por la funcion Chr() de VB, esto lo que hace es transformar el numero a su correspondiente caracter ASCII.
Por lo tanto, necesito tomar estos numeros del parametro y transformarlos.

Intente hacerlo por mi mismo, pero no hay caso...
Aqui les dejo una porcion del programa simplificado, dado que no hace falta poner todo lo que es relativo al openport, etc, etc.
Espero puedan ayudarme...

Muchas Gracias!

Código:
int main(int argc, char *argv[]) {

   char sCmd[254];
   sCmd[0] = argv[1];
   sCmd[1] = argv[2];
   sCmd[2] = argv[3];
   if(argv[4]) sCmd[3] = argv[4];

   /*
   Esto lo que deberia hacer seria tomar el argumento 1 (seria 200) transformarlo a su correspondiente caracter ascii y guardarlo en sCmd[n].

NOTA:
   si uso el codigo de esta manera funciona perfectamente... pero necesito poder enviar estos datos por argumentos:

   char sCmd[254];
   sCmd[0] = 200;
   sCmd[1] = 150;
   sCmd[2] = 100;
   sCmd[3] = 21;

   */

}
__________________
IntoXicadoS -- Rock Argentina
"Cuando estes triste ponete a pensar, la solucion en vos esta..."

edi!
  #2 (permalink)  
Antiguo 21/03/2007, 19:22
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Prolema con argumentos en main(), conversion de tipos?

Hola

En primer lugar esto esta mal:
Código:
char sCmd[254];
   sCmd[0] = argv[1];
   sCmd[1] = argv[2];
   sCmd[2] = argv[3];
Cuando haces sCmd[0] solo estas accediendo a un caracter, en cambio argv[1] te reroena un puntero a una cadena de caracteres.

Si quieres copiar el primer parametro (por ejemplo) simplemente haces algo asi:
Código:
char cCmd1[254];
strcpy(sCmd1, argv[1]);
ahora bien , no veo la nececidad de copiar cada uno de los parametros.

La funcion Chr de VB lo unico que hace es retornarte el caracter ASCII equivalente al numero que pasas como parametro.

Por otra parte si quieres saber cuantos parametros recibio tu programa usa la variable argc y asi puedes saber incluso si el usuario paso menos de 3 argumentos a tu programa.

Espero te sirva de algo.
Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #3 (permalink)  
Antiguo 21/03/2007, 19:24
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Prolema con argumentos en main(), conversion de tipos?

Por cierto, no veo la necesidad de copiar el parametro cuando puedes convertirlo de una ves a entero con la funcion atoi() y lo unico que te restaria es encontrar el caracter equivalente.
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #4 (permalink)  
Antiguo 21/03/2007, 19:31
Avatar de edi87  
Fecha de Ingreso: mayo-2004
Ubicación: Argentina
Mensajes: 113
Antigüedad: 20 años
Puntos: 0
Re: Prolema con argumentos en main(), conversion de tipos?

Hola Lucifer, gracias por tu respuesta!

Te comento que lo resolvi con la funcion que me comentaste, atoi().
Mas alla de no estar en la libreria standard, me sirve igual.

Esto lo hice y funciono y pase a otra parte del programa, pero sinceramente no entiendo porque es necesario (si lo es, como te digo no lo probe) el paso intermedio a las variables "p1, p2, p3, p4"... me suena a que es innecesario... probare y dejare aqui el resultado.

Gracias por tu ayuda!!!

Código:
int main(int argc, char *argv[]) {
        char sCmd[254];
	int p1, p2, p3, p4;
	
	p1 = atoi(argv[1]);
	p2 = atoi(argv[2]);
	p3 = atoi(argv[3]);
	if(atoi(argv[4])) p4 = atoi(argv[4]);
	
	sCmd[0] = p1;
	sCmd[1] = p2;
	sCmd[2] = p3;
	if(p4) sCmd[3] = p4;
}
__________________
IntoXicadoS -- Rock Argentina
"Cuando estes triste ponete a pensar, la solucion en vos esta..."

edi!
  #5 (permalink)  
Antiguo 21/03/2007, 19:39
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Prolema con argumentos en main(), conversion de tipos?

La funcion atoi si forma parte del estandar Ansi C, asi que yo diria que si es estandar.

Por otra parte, esto que haces aca es medio "peligroso":
Código:
if(p4) sCmd[3] = p4;
que pasa si no ejecuta lo que tienes el el if correspondiente al 4to parametro y esa variable por mala suerte tiene un valor distinto de 0? la va a asignar de igual manera, mi recomendacion (la repito) es que uses argc para saber cuantos parametros recibio tu programa.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #6 (permalink)  
Antiguo 21/03/2007, 19:46
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Prolema con argumentos en main(), conversion de tipos?

Cita:
...pero sinceramente no entiendo porque es necesario (si lo es, como te digo no lo probe) el paso intermedio a las variables "p1, p2, p3, p4"...
En necesario si quieres verificar que los parametros esten en el rango aceptado por char (busca la ayuda), si no es asi entonces puedes hacer directamente la asignacion :
Código:
sCmd[0]=atoi(argv[1])

Cita:
Gracias por tu ayuda!!!
De nada
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #7 (permalink)  
Antiguo 22/03/2007, 17:21
Avatar de edi87  
Fecha de Ingreso: mayo-2004
Ubicación: Argentina
Mensajes: 113
Antigüedad: 20 años
Puntos: 0
Re: Prolema con argumentos en main(), conversion de tipos?

Hola de nuevo Lucifer!

Comprendo lo que me dices... lo probare y comento que tal anduvo...
me parece correcto lo que me planteas del argc, asi que tambien lo hare y te comentare que paso y como quedo finalmente.

Muchas Gracias por tu ayuda y consejos!
__________________
IntoXicadoS -- Rock Argentina
"Cuando estes triste ponete a pensar, la solucion en vos esta..."

edi!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:51.