Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: juansi en 06 de Mayo de 2009, 17:42:30
Título: salir de funciones y bucles
Publicado por: juansi en 06 de Mayo de 2009, 17:42:30
hola amigos, tengo un problema con un programa q me va a volver loco, mi problema es:
¿como puedo salir de un bucle infinito q esta dentro de una funcion "x" para volver a la funcion main? ¿y como puedo volver a una funcion anterior a la funcion x?
gracias de ante mano
Título: Re: salir de funciones y bucles
Publicado por: QIQE en 06 de Mayo de 2009, 17:44:38
poniendo una condición mas en el bucle, la cual cambias desde dentro de él y asi sales
Título: Re: salir de funciones y bucles
Publicado por: BrunoF en 06 de Mayo de 2009, 17:50:49
Para salir inmediatamente de un bucle, como un while() o un for() utiliza "break". Para salir de una subrutina utiliza "return". Si la subrutina devuelve un valor, deberías realizar el "return" con el valor adecuado.
Saludos.
Título: Re: salir de funciones y bucles
Publicado por: micro_cadaver en 14 de Mayo de 2009, 17:53:58
BIFURCACIONES DE CONTROL BREAK Esta instrucción nos permite salir de cualquier bucle ya sea WHILE , DO WHILE, FOR. Cuando el programa encuentra a esat instrucción simplemente salta a la siguiente instruccion fuera del bucle donde se hallaba contenido.
Ejm: for(a=0;a<=200;a++) { Delay1KTCYx(200); if (PORTA==0X05) break; LATB=~LATB; }
En esta situación, tenemos un bucle FOR que contara hasta 200 con la variable " a " para satisfacer la expresión del bucle, sin embargo existe un break el cual depende de la estructura condicional IF que inidica si PORTA is igual a 5 entonces ejecuta break, de lo contrario finaliza el IF y continua con el bucle. Cuando PORTA sea igual a 5 el programa se topara con el BREAK y como consecuencia terminara con el bucle FOR y continuará con la siguiente instrucción fuera del bucle.
BIFURCACIONES DE CONTROL CONTINUE Digamos que dentro de nuestro bucle existe una instrucción al final del bloque de codigo que queremos saltarla o no ejecutarla dependiendo de alguna condición extra, la instruccion CONTINUE permite saltar todas las instrucciones posteriores a su aparición dentro del bloque de codigo escrito en el bucle.
Ejm: for(b=0;b<=200;b++) { Delay1KTCYx(200); if (PORTA==0X0A) continue; LATC=~LATC; }
En este caso, el bucle FOR contara hasta 200 con la variable " b " y ejecutará la ultima instruccion LATC=~LATC dependiendo del estado del PORTA, siempre y cuando sea igual a 0X0A, de esta manera se utiliza el CONTINUE.
mas informacion aqui (http://www.todopic.com.ar/foros/index.php?topic=17017.msg115528#msg115528)
Título: Re: salir de funciones y bucles
Publicado por: LalitoX en 15 de Mayo de 2009, 09:51:30
Igual no esta de mas decir que entre los programadores usar break es considerado "trampa" generalmente, siempre se puede modificar la condición o hacer lo que dice qiqe y evitar el uso de break.
Título: Re: salir de funciones y bucles
Publicado por: RedPic en 15 de Mayo de 2009, 10:03:12
Un ejemplo de lo que dice QUIQE:
Estos dos bucles son similares. Cuando PORTA vale 0x05 el bucle termina. :mrgreen:
Código: C#
for(a=0;a<=200;a++)
{
Delay1KTCYx(200);
if(PORTA==0X05)
break;
LATB=~LATB;
}
y
Código: C#
for(a=0;a<=200,PORTA!=0X05;a++)
{
Delay1KTCYx(200);
LATB=~LATB;
}
Cuando ponemos dos o mas condiciones de salida, separados por comas, en el bucle éste termina cuando cualquiera de dichas condiciones deja de cumplirse.