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

Problema parametros funcion

Estas en el tema de Problema parametros funcion en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 22/03/2012, 15:21
 
Fecha de Ingreso: marzo-2012
Mensajes: 1
Antigüedad: 12 años, 1 mes
Puntos: 0
Problema parametros funcion

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];
	
	scanf("%s %s %s",robotx,orden,metros);
	

while (uno!=2) /* si ponemos exit uno=2 finaliza el programa*/
	{
	printf("#\n");
	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;
	}
}
Muchas gracias de antemano
  #2 (permalink)  
Antiguo 22/03/2012, 21:54
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Problema parametros funcion

Hola cesarbuf! Antes de la respuesta falta un scanf dentro del while(para pedir un nuevo robot) sino estarias generando un ciclo infinito
Código C:
Ver original
  1. while (uno!=2) /* si ponemos exit uno=2 finaliza el programa*/
  2. scanf("%s %s %s",robotx,orden,metros);
  3. .........
Otra cosa importante es cuando declaras int uno; ¿x q importante? cuando por primera vez entras en el while y preguntas uno!=2, lo q enrealidad estas haciendo es preguntar "basura" es distinto de 2 ya que a uno nunca lo inicializaste por ende uno tiene basura lo cual no es una buena practica de programacion. En este caso te conviene definirla con algun valor.

Ahora las respuestas:
Con respecto a que no podes salir con "exit" me parece raro, xq compile el codigo y yo si pude salir bien.

El otro problema no es en la segunda funcion sino en la declaracion de los arreglos robotx, orden y metros con tamaños de 6, 9 y 2, mas q nada en el arreglo metros[2]. Si a metros le ingresas un numero de un solo digito, ej 2, el programa va a andar bien pero si le ingresas , ej 23, va a andar mal ¿x q? Al declarar metros[2] vas a poder usar las posiciones 0 y 1 en el arreglo. Si le ingresas el numero 2 este se va a guardar en la posicion 0 y el caracter '\0' se va a guardar en la posicion 1. Ahora si le ingresas 23, el 2 se va a guardar en la pos. 0 y el 3 en la pos 1, pero el '\0' ¿donde se va a guardar? lo mas probable es q se guarde en el arreglo orden. Es por esto q la segunda funcion no anda como queres

En conclusion: la respuesta solo era que cambies los tamaños de los arreglos, la explicacion era sola para q entiendas xq pasa eso

Espero te sirva la respuesta, saludos

Etiquetas: funciones, parametros
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:56.