• Sábado 1 de Junio de 2024, 10:10

Autor Tema:  BUCLE INFINITO "como evitarlo"  (Leído 2845 veces)

calichecal

  • Nuevo Miembro
  • *
  • Mensajes: 13
  • Nacionalidad: co
    • Ver Perfil
BUCLE INFINITO "como evitarlo"
« en: Miércoles 24 de Junio de 2009, 02:43 »
0
estoy tratando  de utilizar un while solo por practicar que empieze con el evento clip de un command ,he leido y seguido al pie de la tetra la estructura de esa instruccion pero siempre termino en un bucle infinito xd....agradesco la ayuda para el que sepa como es la adecuada utilizacion de while y su utilidad...

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: BUCLE INFINITO "como evitarlo"
« Respuesta #1 en: Miércoles 24 de Junio de 2009, 16:12 »
0
Pon tu bucle y te lo explicamos. Seguramente tu condición está mal.

PD: no olvides las etiquetas de código...

calichecal

  • Nuevo Miembro
  • *
  • Mensajes: 13
  • Nacionalidad: co
    • Ver Perfil
Re: BUCLE INFINITO "como evitarlo"
« Respuesta #2 en: Miércoles 24 de Junio de 2009, 21:05 »
0
Cita de: "m0skit0"
Pon tu bucle y te lo explicamos. Seguramente tu condición está mal.

PD: no olvides las etiquetas de código...


 Private Sub Command1_Click()                                
 Dim a as integer                                              
 a = text1.text
  while a < 10
 text1.text =  val (a) + 1
wend
end sub

Private Sub Timer1_Timer()             [propiedad interval  =  1000]
text1.text = val(text1.text) + 1
end sub

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: BUCLE INFINITO "como evitarlo"
« Respuesta #3 en: Miércoles 24 de Junio de 2009, 21:53 »
0
¿Y las etiquetas de código? Mira que lo repito veces y soy pesao  :lol:

Fíjate que tú pones como condición de que se repita el bucle a < 10. Y repites

Código: Visual Basic
  1. text1.text = val (a) + 1
  2.  
Este código no cambia el valor de a, por tanto a será siempre el valor de text1.text antes de empezar el bucle. Por tanto nunca llegará a ser mayor que diez. Por tanto nunca sales del bucle.

calichecal

  • Nuevo Miembro
  • *
  • Mensajes: 13
  • Nacionalidad: co
    • Ver Perfil
Re: BUCLE INFINITO "como evitarlo"
« Respuesta #4 en: Miércoles 24 de Junio de 2009, 23:20 »
0
Cita de: "m0skit0"
¿Y las etiquetas de código? Mira que lo repito veces y soy pesao  :lol:

Fíjate que tú pones como condición de que se repita el bucle a < 10. Y repites

Código: Visual Basic
  1. text1.text = val (a) + 1
  2.  
Este código no cambia el valor de a, por tanto a será siempre el valor de text1.text antes de empezar el bucle. Por tanto nunca llegará a ser mayor que diez. Por tanto nunca sales del bucle.
HABER SI ENTENDI  : ES COMO SI EN A QUEDARA CON EL VALOR  DEL TEXT1.TEXT DE CUANDO EMPEZO EL BUCLE? :wacko:

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: BUCLE INFINITO "como evitarlo"
« Respuesta #5 en: Jueves 25 de Junio de 2009, 10:36 »
0
No escribas en mayúsculas, es molesto :P

Tampoco es tan complicado de entender, hombre. Éste es tu código:

Código: Visual Basic
  1. a = text1.text
  2. While a < 10
  3.     text1.text = val (a) + 1
  4. Wend
  5.  
Le asignas a a el valor de text1. Luego mientras a sea menor de 10, pones que text1 sea a + 1. No sé por qué razón usas Val(), eso es para cadenas de caracteres, y a es un entero (Integer) :huh: . Sí que tiene sentido el Val() en el timer.

Entonces, repites lo que hay dentro del while infinitas veces, porque a jamás cambia de valor, por tanto jamás vas a salir del bucle porque la condición es que a sea 10 o mayor para que esto ocurra. O lo que es lo mismo, mientras a < 10 repetirás eso, es decir, siempre, porque a no cambia. Tampoco cambias el valor de a en el timer que tienes, que por cierto no le veo mucho sentido... posiblemente porque no entiendo qué pretendes hacer, cuál es el objetivo de tu código.

Un par de consejos: pon un DoEvents dentro del bucle, porque sino se te quedará colgado el VB6 al entrar en el bucle, y además así te actualiza el text1:

Código: Visual Basic
  1. While a < 10
  2.     DoEvents
  3.     text1.text = val (a) + 1
  4. Wend
  5.  

También, While-Wend está obsoleto, usa Do While-Loop:

Código: Visual Basic
  1. Do While a < 10
  2.     DoEvents
  3.     text1.text = val (a) + 1
  4. Loop
  5.  
Si cambiásemos el valor de a, sí que saldría del bucle (siempre y cuando eventualmente se deje de cumplir que a < 10). Por ejemplo, esto ya no es un bucle infinito:

Código: Visual Basic
  1. Do While a < 10
  2.     DoEvents
  3.     text1.text = val (a) + 1
  4.     a = a + 1
  5. Loop
  6.  
¿Está más claro ahora?