3

I need the user to fill in an integer, but with the code shown beneath, also doubles are allowed. How can I change it to allow only integers?

do{

    $opgegevenGetal = read-host "Enter an integer"

    if(![bool]($opgegevenGetal -as [int])){
        write-host "Only integers please"
    }

}

until ([bool]($opgegevenGetal -as [int]))
Tomzie
  • 1,338
  • 4
  • 19
  • 25

2 Answers2

6

try:

do{
    $opgegevenGetal = read-host "Enter an integer"
    $a = ""
    if(  ![int32]::TryParse( $opgegevenGetal , [ref]$a ))
      {
        write-host "Only integers please"
      }
  } until ($a -gt 0)

Codes for accept 0 as input:

do{
    $opgegevenGetal = read-host "Enter an integer"
    $a = ""
    if(  ![int32]::TryParse( $opgegevenGetal , [ref]$a ))
      {
        write-host "Only integers please"
      }
  } until ($a -gt 0 -or $opgegevenGetal -eq '0')

or:

do{
    $opgegevenGetal = read-host "Enter an integer"
    $a = ""
    $b = [int32]::TryParse( $opgegevenGetal , [ref]$a )
    if(  !$b)
      {
        write-host "Only integers please"
      }
  } until ($b)
CB.
  • 58,865
  • 9
  • 159
  • 159
  • @Tomzie Just a precisation: if user input `0` (because the untill test ) the loop doesn't exit. If is a problem I'll post an easy way to solve it. – CB. Dec 04 '12 at 11:25
  • 1
    A little more compact version: `$value = 0; $read = Read-Host 'Enter an integer'; while( ![int]::TryParse( $read, [ref]$value ) ) { $read = Read-Host 'Only integers please' }` – Emperor XLII Dec 07 '12 at 00:33
6

A little more compact version of Christian's answer:

$value = 0
$read = Read-Host 'Enter an integer'
while( ![int]::TryParse( $read, [ref]$value ) ) {
  $read = Read-Host 'Only integers please'
}
Community
  • 1
  • 1
Emperor XLII
  • 13,014
  • 11
  • 65
  • 75