为什么当我执行这段代码并在cmd提示符中输入一个类似“wyk”的字符串时,函数takeInput()
在接受新输入之前会向cmd打印"How old are you"
四次?
func takeInput() {
fmt.Println("How old are you ?")
var age int32
_, err := fmt.Scanln(&age)
if err != nil {
takeInput()
return
}
if age < 18 {
fmt.Printf("sorry but, you still have %d years to go kid", 18-age)
} else if age > 18 {
fmt.Println("well, bottoms up then!")
}
}
func main() {
takeInput()
}
字符串
输出如下所示
How old are you ?
wyk
How old are you ?
How old are you ?
How old are you ?
How old are you ?
_
型
我尝试在每个递归循环之前添加一个计数器,实际上它为每个字母旋转一个新的循环,同时每字母+ 1打印一次语句。即使我输入一个数字,如19,它也会将计数器增加2(但它不会执行Println
)。
1条答案
按热度按时间2exbekwf1#
事情是这样的:
fmt.Scanln
扫描输入。它只需要读取一个字符来确定输入不是有效的整数:w
。fmt.Scanln
返回错误。1.您再次递归调用
takeInput
,这将打印How old are you ?
。fmt.Scanln
扫描输入。它只需要读取一个字符来确定输入不是有效的整数:y
。fmt.Scanln
返回错误。1.您再次递归调用
takeInput
,这将打印How old are you ?
。fmt.Scanln
扫描输入。它只需要读取一个字符来确定输入不是有效的整数:k
。fmt.Scanln
返回错误。1.您再次递归调用
takeInput
,这将打印How old are you ?
。换句话说,
How old are you ?
对于输入中的每个无效字符打印一次。尝试输入类似
a 12
或a 20
的内容,您将更清楚地看到它:个字符