Warum werden Integer in PowerShell nach Ziffern verglichen?

8

Mein Code sagt Ihnen, ob Ihre geschätzte Zahl höher oder niedriger als eine zufällig generierte Zahl ist, aber es scheint nur die ersten Ziffern der Zahl zu vergleichen, wenn eine von ihnen unter 10 liegt.

%Vor%

Wenn beispielsweise $GeneratedNum = 56 und $Input = 7 zurückgegeben werden, wird "Too High"

zurückgegeben     
iasanator 30.06.2015, 19:36
quelle

4 Antworten

13

Dies liegt daran, dass Sie eine Zeichenfolge mit einer Ganzzahl vergleichen. Die Reihenfolge ist wichtig.

%Vor%

Ist eigentlich das Gleiche wie:

%Vor%

Alternativ:

%Vor%

würde Ihnen das korrekte Ergebnis geben. PowerShell versucht, das rechte Argument zum Typ der linken Seite zu zwingen.

Sie könnten eine explizite Umwandlung versuchen:

%Vor%     
briantist 30.06.2015, 19:44
quelle
4

Das Problem kommt von der Tatsache, dass Read-Host eine Zeichenkette zurückgibt, also mit Ihrer Besetzung $Input ist ein ArrayListEnumeratorSimple try:

%Vor%

Sie sollten auch try{}catch{} verwenden, um den Fall zu erfassen, dass die Eingabe kein int ist.

Sie müssen wissen, dass bei Verwendung von PowerShell-Vergleichsoperatoren der Typ des linken Teils ausgewählt wird, sodass der rechte Teil in den linken Typ gegossen wird. Wissend, dass Sie folgendes schreiben könnten, wo ich einfach die $GeneratedNum , die eine ganze Zahl ist, links von den Vergleichen setzen:

%Vor%     
JPBlanc 30.06.2015 19:48
quelle
0

Verwenden Sie niemals eine Variable mit dem gleichen Namen wie eine automatische Variable: $input ist eine automatische Variable.

Siehe diesen Code, wo ich den vom Host gelesenen Wert pipete (und nicht die Variable $input verwende):

%Vor%

Wichtig zu beachten, dass mein Code korrekt falsche Eingaben behandelt (nicht numerische Zeichen) wie w oder ähnliche Strings ( qwerty ), die andere Vorschläge zum Scheitern bringen.

Ich nutze die Tatsache, dass Sie Ganzzahlen immer größer als 0 generieren.

    
cherimpe 01.07.2015 03:11
quelle
0

Verwendung von switch :

%Vor%     
cherimpe 01.07.2015 03:32
quelle