$table_num = Read-Host -Prompt 'Enter the table number you want to get printed'
for ($i=1; $i-lt 11; $i++){
$ans = ($table_num*$i)
write "$table_num*$i=$ans"
}
上面是我试图执行的脚本,我得到如下结果:
Enter the table number you want to get printed: 5
5*1=5
5*2=55
5*3=555
5*4=5555
5*5=55555
5*6=555555
5*7=5555555
5*8=55555555
5*9=555555555
5*10=5555555555
我不熟悉脚本并帮助我处理代码。
答案 0 :(得分:1)
由于你没有指出预期的行为是什么,我不确定我是否解决了你的问题,但我想你想要这样的事情
$table_num_str = Read-Host -Prompt 'Enter the table number you want to get printed'
$table_num = [int]::Parse($table_num_str)
for ($i=1; $i-lt 11; $i++){
$ans = ($table_num*$i)
write "$table_num*$i=$ans"
}
当输入'5'时会产生
Enter the table number you want to get printed: 5
5*1=5
5*2=10
5*3=15
5*4=20
5*5=25
5*6=30
5*7=35
5*8=40
5*9=45
5*10=50
所以问题是Read-Host
返回string
,当与X相乘时会导致该字符串重复X次。
答案 1 :(得分:1)
问题在于Read-Host cmdlet返回的类型。
$num = read-host
$num.GetType()
返回Object[]
,如果需要,它会隐式转换为其他类型。当使用二元运算符(+, - ,*)时,Type也会转换为第一个参数类型。 object[]
类型中没有*运算符。这就是为什么它被转换为字符串然后成倍增加的原因。如果第一个参数是int,PowerShell也会尝试将其转换为int。您可以调整代码以使用此转换规则。看看下面的脚本:
$table_num = Read-Host -Prompt 'Enter the table number you want to get printed'
1..10 | % { write "$table_num*$_=$($_*$table_num)" }
它还产生:
5*1=5
5*2=10
5*3=15
5*4=20
5*5=25
5*6=30
5*7=35
5*8=40
5*9=45
5*10=50
答案 2 :(得分:0)
感谢您的回答!!
实际上我添加了数据类型int
。脚本很好,如下所示。
$table_num = Read-Host -Prompt 'Enter the table number you want to get printed'
For ($i=1; $i-lt 11; $i++){
$ans = ([int]$table_num*$i)
write "$table_num * $i = $ans"
}
答案 3 :(得分:-1)
要进行工作计算,您需要一个数字,而不是字符串。
乘以字符串会产生这种结果:
"test" * 5 # returns testtesttesttesttest
您可以像这样解决问题:
[int]$input_number = $null
$input_string = Read-Host -Prompt 'Enter the table number you want to get printed'
while(-not [int]::TryParse($input_string, [ref]$input_number)) {
$input_string = Read-Host -Prompt 'Please enter a number'
}
for ($i = 1; $i -lt 11; $i++) {
$ans = ($input_number * $i)
Write-Host "$input_number * $i = $ans"
}
[int]::TryParse($input_string, [ref]$input_number)
将尝试将输入字符串解析为integer
并将值存储在$input_number
中。只要失败(由于输入错误),脚本就会要求输入新内容。
有关其他信息,请参阅this other question。
答案 4 :(得分:-2)
do {
$table_num = read-host "Enter the table number you want to get printed"
$a = ""
if( ![int32]::TryParse( $table_num , [ref]$a ) ) {
Write-Host "Only integers please"
}
} until ($a -gt 0)
1..10 | % { Write-Host "$table_num*$_=$($_*$table_num)" }