我不明白为什么按回车键和按键盘上的 0 是一样的。
[int] $Choice = -1
$Count = 2
while ($Choice -lt 0 -or $Choice -gt $Count)
{
Write-Host "Input number"
$Choice = Read-Host
Write-Host "choice:"
Write-Host $Choice
}
Run Code Online (Sandbox Code Playgroud)
即使按回车,输出也会是 0。我希望用户明确输入 0。
在第一个声明中:
[int] $Choice = -1
Run Code Online (Sandbox Code Playgroud)
...您将类型转换$choice为[int].
当您对赋值的左侧(变量名称的左侧)应用强制转换时,PowerShell 会将其“记住”为类型约束并将变量视为强类型 - PowerShell 将尝试转换任何您$choice从那里分配到[int].
在没有任何其他输入的情况下在提示中按 Enter 会Read-Host返回一个空字符串(如"")
转换逻辑将空字符串视为$null,并强制转换$null为[int]结果值0。您可以通过将空字符串[int]直接转换为:
PS C:\> [int]""
0
Run Code Online (Sandbox Code Playgroud)
如果您明确需要一个数字,您可能应该Read-Host在分配给之前验证输入$Choice:
$inputString = Read-Host
if($inputString -notmatch '^\d+$') {
Write-Host "Digits only please!"
continue
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |