读取用户输入并将其拆分为两个 float64 数字



>我有一个函数可以从标准输入读取单个 float64:

func readFloat() float64 {
scanner := bufio.NewScanner(os.Stdin)
for {
scanner.Scan()
in := scanner.Text()
n, err := strconv.ParseFloat(in, 64)
if err == nil {
return n
} else {
fmt.Println("ERROR:", err)
fmt.Print("nPlease enter a valid number: ")
}
}
}

我想修改它以读取两个浮点数,例如

func main() {
fmt.Print("nEnter x, y coordinates for point1: ")
x1, y1 := readFloat()

我面临的问题是分裂scanner.Text()。有一个功能scanner.Split()但不知道如何使用它。

任何可能的解决方案都会有所帮助。

我可能会在这里使用fmt.Sscanf

package main
import (
"fmt"
)
func main() {
testCases := []string{"1,2", "0.1,0.2", "1.234,2.234"}
var a, b float64
for _, s := range testCases {
_, err := fmt.Sscanf(s, "%f,%f", &a, &b)
if err != nil {
panic(err)
}
fmt.Printf("Got %f, %fn", a, b)
}
}

输出:

Got 1.000000, 2.000000
Got 0.100000, 0.200000
Got 1.234000, 2.234000

https://play.golang.org/p/7ATyjlkPhnD

使用strings.Split

package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func readFloat() (float64, float64) {
scanner := bufio.NewScanner(os.Stdin)
for {
scanner.Scan()
in := scanner.Text()
parts := strings.Split(in, ",")
x, err := strconv.ParseFloat(parts[0], 64)
if err != nil {
fmt.Println("ERROR:", err)
fmt.Print("nPlease enter a valid number: ")
}
y, err := strconv.ParseFloat(parts[1], 64)
if err != nil {
fmt.Println("ERROR:", err)
fmt.Print("nPlease enter a valid number: ")
}
return x, y
}
}
func main() {
fmt.Print("nEnter x, y coordinates for point1: ")
x1, y1 := readFloat()
fmt.Println(x1, y1)
}

使用它:

$ go run main.go
Enter x, y coordinates for point1: 1.2,3.4
1.2 3.4

相关内容

  • 没有找到相关文章

最新更新