Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: sargo en 22 Marzo 2012, 22:23 pm



Título: problema parametros funcion
Publicado por: sargo en 22 Marzo 2012, 22:23 pm
Hola a todos, soy nuevo en la programacion C y tambien en el foro.

Tengo un par de problemas en el siguiente programa:
Main: se encarga de recibir por pantalla los patametros robotx orden y metros en una misma linea a y a la vez, e imprimir los codigos de control despues de llamar a las 2 funciones.

La funcion Robot_valido con el parametro robotx , comprueba que hemos introducido correctamente la palabra robot junto con x(numero entre 1 y 5 inclusive), esta parte funciona bien. Pero si introzuco exit no sale del programa como quiero.

y el otro problema es que la segunda funcion no recibe bien los parametros, he probado con printf en varias zonas del programa y parece como si se machacaran los parametros orden y metros.

aqui os dejo el codigo a ver si me podeis echar un cable.

Código:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>



int Robot_valido (char *robotx);
int Orden_valida (char *orden, char *metros);

main ()
{
int uno,dos;
char robotx[6];
char orden[9];
char metros[2];

        uno=0;



while (uno!=2) /* si ponemos exit uno=2 finaliza el programa*/
{
printf("#\n");
        scanf("%s %s %s",robotx,orden,metros);
        fflush(stdin);
uno=Robot_valido (robotx);
printf("%i\n",uno);/*imprimimos codigo de control de robotx*/
if (uno==0)/* si robotx esta bien uno=0, sino pide de nuevo robot*/
{
dos=Orden_valida(orden,metros);
printf("%i\n",dos);/*imprimimos codigo de control de orden y metros*/
}
}
}


int Robot_valido (char *robotx)
{

char exit[]="exit";
char robot[]="robot";
char aux;




if ((strcmp(exit,robotx)) != 0)
{
if (strncmp(robot,robotx,5)==0)/* comparamos los 5 primeros caracteres de robotx con "robot"*/
{
strcpy(&aux,robotx+5);/* copiamos x de robotx en aux*/
if ((1<=atoi(&aux))&&(atoi(&aux)<=5))/* si x entre 1 y 5 correcto*/
{
printf("Identificador: ");
printf("%s\n",robotx);
return 0;
}
else
{
printf("numero identificador no valido\n");
return 1;
}

    }
else
{
printf("robot no valido\n");
return 1;
}
}
else
{
printf("salimos\n");
return 2;
}
}

int Orden_valida (char *orden,char *metros)
{

char arriba[10]="arriba";
char abajo[10]="abajo";
char izquierda[10]="izquierda";
char derecha[10]="derecha";
int i;



if ((strcmp(orden,arriba)) == 0)
{
printf("Orden: arriba\n");
i=0;
}
else if ((strcmp(orden,abajo)) == 0)
{
printf("Orden: abajo\n");
i=0;
}
else if ((strcmp(orden,izquierda)) == 0)
{
printf("Orden: izquierda\n");
i=0;
}
else if ((strcmp(orden,derecha)) == 0)
{
printf("Orden: derecha\n");
i=0;
}
else
{
printf("Orden no valida\n");
i=1;
}



if (i==0)/*si orden no valida i=1*/
{

if ((1<=atoi(metros))&&(atoi(metros)<=80))/*comparamos si metros esta entre 1 y 80*/
{
printf("Metros: ");
printf("%s\n",metros);
return 0;
}
else
{
printf("Numero de metros no valido\n");
return 1;
}
}
else
{
return 1;
}
}

he editado un poco el codigo para actualizarlo a la ultima version que tengo pero que aun asi sigue fallando en lo mismo.

Muchas gracias de antemano


Título: Re: problema parametros funcion
Publicado por: naderST en 24 Marzo 2012, 00:36 am
Bienvenido al foro, a simple viste tienes varios errores, uno de ellos es hacer fflush al stdin ya que esta función solo se utiliza para flujos de SALIDA. Además estás declarando tu arreglo robotx[] de 6 caracteres cuando tendría que ser de 7 ya que debes dejar espacio para el carácter nulo (\0).

Otra cosa, lo correcto es que la función main retorne un entero.


Título: Re: problema parametros funcion
Publicado por: Beakman en 24 Marzo 2012, 00:39 am
Tenés muchos errores pero probé tu programa y funcionó. Cuando me pide los datos y escribo 'exit' finaliza correctamente.
Tal vez no entendí bien tu pregunta. De todas formas te digo que me parece bastante desorganizado hacer un programa de esa manera.