Problema con While

Iniciado por ezugaru, 25 Septiembre 2009, 19:03 PM

0 Miembros y 2 Visitantes están viendo este tema.

ezugaru

Hola a todos, estoy desarrollando una aplicacion relativamente sencilla pero hay un while que no me responde como yo espero, el código es este:
Dim respuesta As Char
                           respuesta = UCase(InputBox("¿Desea eliminar la clave definitivamente? S=Elimina definitivamente la clave. N=Elimina solo la marca de esa clave", "Responda S ó N"))


                           While (respuesta <> "S" Or respuesta <> "N")

                               respuesta = UCase(InputBox("Respuesta no aceptada. ¿Desea eliminar la clave definitivamente? S=Elimina definitivamente la clave. N=Elimina solo la marca de esa clave"))

                               If respuesta = Nothing Then

                                   Eliminar.Enabled = False
                                   id_prd.Text = Nothing
                                   descripcion.Text = Nothing
                                   id_cat.Text = Nothing
                                   marca.Text = Nothing
                                   existencia.Text = Nothing
                                   p_lista.Text = Nothing
                                   id_prd.Focus()

                                   MsgBox("Baja de artículo cancelada.", MsgBoxStyle.Exclamation)

                                   Exit While

                               End If

                           End While

El problema es que se supone que si el usuario ingresa S o N el while deberia terminar y pasar a la siguiente sentencia de control que es un IF, sin embargo aun poniendo la S o la N el while no termina, ya he probado pasando msgboxes en el while para ver que la variable reciba correctamente el parametro y efectivamente el msgbox me devuelv S o N asi que no se que pueda ser ya le di vueltas y no se que pueda ser ... ayuda por favor.

Keyen Night

Porque te complicas tanto con un blucle, cuando puedes revisar el valor devuelto por un Msgbox...
Código (vb) [Seleccionar]

        If MsgBox("¿Desea eliminar la clave definitivamente?", MsgBoxStyle.YesNo, "Eliminar Clave") = MsgBoxResult.Yes Then
            ''Evento si se responde si
        Else
            ''Evento si se responde no
        End If
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

ezugaru

porque exactamente no entendia muy bien como hacer eso que pones ... gracias!!!!!!!!

Novlucker

Además de que para el bucle while debes de utilizar una bandera ... el while no realiza las operaciones/comparaciones que hace el if .. así que no puedes usar un OR

Por lo demás... ya tienes tu respuesta

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Atrum

Se puede utilizar cualquier operador comparativo en un while y tambien operadores logicos(OR , AND, NOT)  ya que la condicion que evalua es un booleano, asi que el problema estuvo en la condicion:

Código (vbnet) [Seleccionar]
While (respuesta <> "S" Or respuesta <> "N")

esta condicion siempre va a devolver un TRUE ya que el OR siempre va a tomar por verdadera si una de las condiciones se cumple
asi que

si respuesta = "A"
respuesta es diferente de S y respuesta es diferente de N por tanto devuelve TRUE

si respuesta = "S"
respuesta no es diferente de y respuesta si es diferente de N por tanto tambien devuelve TRUE

si respuesta = "N"
repuesta es diferente de S y respuesta no es diferente de N por tanto devuelve TRUE

en conclusion, no importa que contenga la variable respuesta la condicion siempre sera true y el bucle sera infinito.

Esto lo digo solo a modo de comentario, ya que como dijeron antes este bucle es inecesario.