Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: ezugaru en 25 Septiembre 2009, 19:03 PM

Título: Problema con While
Publicado por: ezugaru en 25 Septiembre 2009, 19:03 PM
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.
Título: Re: Problema con While
Publicado por: Keyen Night en 25 Septiembre 2009, 19:54 PM
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
Título: Re: Problema con While
Publicado por: ezugaru en 25 Septiembre 2009, 19:58 PM
porque exactamente no entendia muy bien como hacer eso que pones ... gracias!!!!!!!!
Título: Re: Problema con While
Publicado por: Novlucker en 25 Septiembre 2009, 20:01 PM
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
Título: Re: Problema con While
Publicado por: Atrum en 25 Septiembre 2009, 23:52 PM
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.