我想要一组代码执行,直到用户明确要退出该函数.例如:当用户运行程序时,他将看到2个选项:
这将通过开关盒结构实现.这里如果用户按下1,将执行与1相关联的功能组,如果用户按下2,程序将退出.我应该如何在golang中实现这个场景?在java中,我相信这可以使用do while结构完成但是不支持do while循环.以下是我尝试的代码,但这是一个无限循环:
func sample() {
var i = 1
for i > 0 {
fmt.Println("Press 1 to run")
fmt.Println("Press 2 to exit")
var input string
inpt, _ := fmt.Scanln(&input)
switch inpt {
case 1:
fmt.Println("hi")
case 2:
os.Exit(2)
default:
fmt.Println("def")
}
}
}
Run Code Online (Sandbox Code Playgroud)
该程序与输入无关,仅打印"hi".有人可以纠正我在这里做错了什么吗?
谢谢.
Lin*_*ope 56
阿do..while可以更直接在Go被仿真用一个for循环使用bool与接种循环变量true.
for ok := true; ok; ok = EXPR { }
Run Code Online (Sandbox Code Playgroud)
或多或少直接等同于
do { } while(EXPR)
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下:
var input int
for ok := true; ok; ok = (input != 2) {
n, err := fmt.Scanln(&input)
if n < 1 || err != nil {
fmt.Println("invalid input")
break
}
switch input {
case 1:
fmt.Println("hi")
case 2:
// Do nothing (we want to exit the loop)
// In a real program this could be cleanup
default:
fmt.Println("def")
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:游乐场(带有dummied-out Stdin)
虽然,不可否认,在这种情况下,它可能是更清晰的整体,只是显式调用(标记)break,return或os.Exit在循环.
小智 13
做...在进行中可以是这样的:
func main() {
var value int
for {
value++
fmt.Println(value)
if value%6 != 0 {
break
}
}
}
Run Code Online (Sandbox Code Playgroud)
Lan*_*der 12
当问到这个问题时,对于这个特定场景来说这是一个更好的答案(我很少知道这将是搜索Google"do while loop golang"时的第一个结果).一般来说,请回答@ LinearZoetrope的答案.
将函数包装在for循环中:
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("Press 1 to run")
fmt.Println("Press 2 to exit")
for {
sample()
}
}
func sample() {
var input int
n, err := fmt.Scanln(&input)
if n < 1 || err != nil {
fmt.Println("invalid input")
return
}
switch input {
case 1:
fmt.Println("hi")
case 2:
os.Exit(2)
default:
fmt.Println("def")
}
}
Run Code Online (Sandbox Code Playgroud)
甲for没有任何声明循环相当于while在其他类似C语言的循环.查看涵盖循环的Effective Go文档for.
小智 11
whileGo中的循环可以像这样简单:
package main
import `fmt`
func main() {
for {
var number float64
fmt.Print(`insert an Integer eq or gr than 10!!!`)
fmt.Scanf(`%f`, &number)
if number >= 10 { break }
fmt.Println(`sorry the number is lower than 10....type again!!!`)
}
Run Code Online (Sandbox Code Playgroud)