注意:我是StackOverflow和编程新手,所以如果我的问题不是“专业”或“格式良好”,请原谅我。
我使用以下Go(Golang)代码从终端捕获一些以空格分隔的数字(字符串),然后将其拆分为一个切片。后来我通过从字符串切片一次获取一个项目并将其转换为float64并将其附加到float64-slice,将此切片转换为一片float64。 然后我将返回生成的float64切片并将其打印在main函数中。 问题是当我将一些以空格分隔的数字传递给终端时,最后一位数字被转换为零。
例如,如果我通过1 2 3 4 5
我希望结果切片为[1 2 3 4 5]
,但它会将切片显示为[1 2 3 4 0]
。
我正在尝试从最近5个小时开始,但我无法找到我所缺少的东西或弄乱。
代码:
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
a := ReadInput()
fmt.Println(a)
}
func ReadInput() []float64 {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
textSlice := strings.Split(text, " ")
floatsSlice := make([]float64, 0)
for _, elem := range textSlice {
i, _ := strconv.ParseFloat(elem, 64)
floatsSlice = append(floatsSlice, i)
}
return floatsSlice
}
提前谢谢你!
答案 0 :(得分:1)
ReadString读取直到输入中第一次出现delim,
返回包含数据的字符串,包括 分隔符。
所以,strings.Split(text, " ")
不会分割最后\n
个字符,所以:
您可以使用strings.Fields(text)
代替strings.Split(text, " ")
并始终检查错误:
像这样的工作示例代码:
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
a := ReadInput()
fmt.Println(a)
}
func ReadInput() []float64 {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
text, err := reader.ReadString('\n')
if err != nil {
fmt.Println(err)
}
textSlice := strings.Fields(text)
floatsSlice := make([]float64, 0)
for _, elem := range textSlice {
i, err := strconv.ParseFloat(elem, 64)
if err != nil {
fmt.Println(err)
}
floatsSlice = append(floatsSlice, i)
}
return floatsSlice
}