2016-09-30 8 views
0

Wenn ich das folgende Snippet ausführe und einen akzeptablen Wert eingib, bekomme ich das gewünschte Ergebnis.Validieren von Benutzereingaben im Eingabefeld

do while len(strselect) = 0 'or strselect<>"1" or strselect<>"2" or strselect<>"3" 
strselect = inputbox ("Please select:" &vbcrlf&vbcrlf&_ 
"1. Add an entry" &vbcrlf&vbcrlf&_ 
"2. Remove an entry" &vbcrlf&vbcrlf&_ 
"3. Search for an entry" &vbcrlf, "Contact Book") 
if isempty(strselect) then 
wscript.quit() 
elseif strselect="1" then 
wscript.echo "You chose 1" 
elseif strselect="2" then 
wscript.echo "You chose 2" 
elseif strselect="3" then 
wscript.echo "You chose 3" 
end if 
loop 

Allerdings, wenn ich versuche, weiter den Validierungsprozess einschränken (durch die Bemerkung in den do while Bedingungen einschließlich) und das Snippet erneut ausführen, bekomme ich die entsprechenden if Zustand ausgelöst, aber die do Schleife wird fortgesetzt, statt Verlassen .

Ich habe versucht mit isnumeric und cstr auf der do Schleife strselect Bedingungen, ohne Freude ... Was bin ich das verflixte Ding zu bekommen, die Schleife zu beenden?

Antwort

0

Sie haben ein Problem mit der Logik in dem Zustand

  condition 1   condition 2  condition 3  condition 4 
     v----------------v  v------------v v------------v v............v 
do while len(strselect) = 0 or strselect<>"1" or strselect<>"2" or strselect<>"3" 

innen strselect auf Wert je, Sie haben

value c1  c2  c3  c4  
     len=0 <>"1" <>"2" <>"3" c1 or c2 or c3 or c4 
-------------------------------------- -------------------- 
empty true true true true   true 
    1  false false true true   true 
    2  false true false true   true 
    3  false true true false   true 
other false true true true   true 

In jeder Zeile haben Sie mindestens eine Bedingung als true bewertet und Wenn Sie die Bedingungen mit Or Operatoren verketten (auswerten, wenn mindestens einer der Werte wahr ist), wird die vollständige Bedingung als wahr ausgewertet und der Code bleibt

Sie müssen nur die Bedingung

Do While strselect<>"1" And strselect<>"2" And strselect<>"3" 
Do While Not (strselect="1" Or strselect="2" Or strselect="3") 
.... 
+0

Dank ND so viel MC ändern, schön illustriert Antwort. Mein Fehler ist jetzt so klar, wie es letzte Nacht frustrierend unbestimmbar war. Ich werde meine logischen Operatoren und meine Logik überarbeiten! Post aste ... Danke nochmal! :) –

Verwandte Themen