登录
首页 >  Golang >  Go问答

如何打破Golang中的循环

来源:stackoverflow

时间:2024-04-22 14:12:28 493浏览 收藏

大家好,我们又见面了啊~本文《如何打破Golang中的循环》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我正在学习使用 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
                }
            //}
        }

解决方案


你不应该像这样从 for 循环内部调用“main”;当你这样做时,你会再次要求用户输入,但调用代码仍然在该循环之外,因此它将继续再次运行。您应该完全删除该“for”循环(以及“break testloop”)。

只需删除决策函数中的 for 循环即可。

每当您的决策函数运行时,如果 value 不为 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...
    }
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>