2016-07-31 47 views
1

注意:我是StackOverflow以及編程的新手,所以如果我的問題不是「如此專業」或「格式良好」,請原諒我。爲什麼數組由Golang中的stdin轉換成最後一項爲零?

我正在使用以下Go(Golang)代碼從終端捕獲一些以空格分隔的數字(字符串),然後將其拆分成一個切片。後來,我通過從字符串切片中一次獲取一個項目並將其轉換爲float64並將其附加到float64切片,將此切片轉換爲一段float64。 然後我返回生成的float64切片並將其打印在主函數中。 問題是,當我將一些以空格分隔的數字傳遞給終端時,最後一位數字轉換爲零。

例如,如果我通過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 
} 

預先感謝您!

回答

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 
} 
相關問題