My code tells you whether your guessed number is higher or lower than a randomly generated number, but it seems to only compare the first digits of the number when one of th
The trouble come from the fact that Read-Host
return a string so with your cast $Input
is an ArrayListEnumeratorSimple
try :
[int]$GeneratedNum = Get-Random -min 1 -max 101
Write-host $GeneratedNum
$isQuitting = $false
Do{
$Input = (Read-Host "Take a guess!") -as [int]
If($Input -lt $GeneratedNum){Write-Output "Too Low"}
If($Input -gt $GeneratedNum){Write-Output "Too High"}
If($Input -eq $GeneratedNum){Write-Output "Good Job!"; $isQuitting = $true}
} Until($isQuitting -eq $true)
You also should use try{}catch{}
to catch the case the input is not an int.
The thing you must understand is that when you use PowerShell comparison operators, the type of the left part is used selected, so the rigth part is casted into the left type. Knowing that you could have write the following, where I just put the $GeneratedNum
which is an integer on the left of the comparisons:
[int]$GeneratedNum = Get-Random -min 1 -max 101
Write-host $GeneratedNum
$isQuitting = $false
Do{
$Input = (Read-Host "Take a guess!")
If($GeneratedNum -gt $Input){Write-Output "Too Low"}
If($GeneratedNum -lt $Input){Write-Output "Too High"}
If($GeneratedNum -eq $Input){Write-Output "Good Job!"; $isQuitting = $true}
} Until($isQuitting -eq $true)