我正在使用Go学习编程。以下程序应连续显示菜单,直到选择0。当前行为:如果用户的第一选择为0,则循环中断。如果第一次选择1、2或3,第二次选择0,则循环不会中断。我在做什么错了?
package main
import "fmt"
func main() {
multiline2 := "Welcome! Please make your choice: \n" +
"--------------------------------- \n" +
"1. Option One \n" +
"2. Option Two \n" +
"3. Option Three \n" +
"0. Exit \n" +
"----------------- \n" +
"Your Choice is: "
fmt.Print(multiline2)
var usersChoice int
fmt.Scanln(&usersChoice)
decider(usersChoice)
}
func decider(value int) {
testLoop:for value > 0 {
switch value {
case 1:
fmt.Println("You Chose One, try again \n")
//break
main()
case 2:
fmt.Println("You Chose Two, try again \n")
//break
main()
case 3:
fmt.Println("You Chose Three, try again \n")
//break
main()
case 0:
fmt.Println("You Chose To Quit")
fmt.Println("Good Bye")
value = 0 // doesnt help...
break testLoop
}
}
}
package main
import "fmt"
func main() {
starter()
}
func starter() {
multiline2 := "Welcome! Please make your choice: \n" +
"--------------------------------- \n" +
"1. Option One \n" +
"2. Option Two \n" +
"3. Option Three \n" +
"0. Exit \n" +
"----------------- \n" +
"Your Choice is: "
fmt.Print(multiline2)
var usersChoice int
fmt.Scanln(&usersChoice)
decider(usersChoice)
}
func decider(value int) {
//for value > 0 {
switch value {
case 1:
fmt.Println("You Chose One, try again \n")
starter()
case 2:
fmt.Println("You Chose Two, try again \n")
starter()
case 3:
fmt.Println("You Chose Three, try again \n")
starter()
case 0:
fmt.Println("You Chose To Quit")
fmt.Println("Good Bye")
//value = 0
//break
}
//}
}
答案 0 :(得分:1)
您不应从这样的for循环内部调用“ main”;当您执行此操作时,您将再次要求用户输入,但是调用代码仍位于该循环中,因此它将继续运行。您应该只删除该“ for”循环(以及“ break testLoop”)。
答案 1 :(得分:1)
只需在决定函数中删除for循环即可。
每当值不为0的决策函数运行时,它将调用main,但该决策函数调用的循环仍在运行。因此,下次传递0时,对于决定者函数的第二次调用不执行任何操作,因此退出。请注意,第一次调用的循环仍在运行(在该调用中,传递的值是用户第一次传递的值),因此您的循环永远不会退出。
func decider(value int) {
switch value {
case 1:
fmt.Println("You Chose One, try again \n")
//break
main()
case 2:
fmt.Println("You Chose Two, try again \n")
//break
main()
case 3:
fmt.Println("You Chose Three, try again \n")
//break
main()
case 0:
fmt.Println("You Chose To Quit")
fmt.Println("Good Bye")
value = 0 // doesnt help...
}
}