2017-04-24 86 views
2

我試圖從標準輸入讀取兩行未知數的空格分隔的整數。我想將每個行整數存儲到它們自己的int切片中。從標準輸入讀取空格分隔的整數到int切片

例如,我的輸入可能看起來像這樣:

1 2 3 
4 5 6 

,我想讀成兩個[]int這一點:

[1,2,3] 
[4,5,6] 

這是我到目前爲止所。 scanner.Scan()是給我行了,但我不知道如何將其轉換成[]int

package main 
import (
    "fmt" 
    "os" 
    "bufio" 
) 

func main() { 
    var firstLine []int 
    var secondLine []int 

    scanner := bufio.NewScanner(os.Stdin) 
    for scanner.Scan() { 
     t := scanner.Text() 
    } 
} 

回答

3

例如,

numbers.go

package main 

import (
    "bufio" 
    "fmt" 
    "os" 
    "strconv" 
    "strings" 
) 

func numbers(s string) []int { 
    var n []int 
    for _, f := range strings.Fields(s) { 
     i, err := strconv.Atoi(f) 
     if err == nil { 
      n = append(n, i) 
     } 
    } 
    return n 
} 

func main() { 
    var firstLine, secondLine []int 
    scanner := bufio.NewScanner(os.Stdin) 
    for i := 1; i <= 2 && scanner.Scan(); i++ { 
     switch i { 
     case 1: 
      firstLine = numbers(scanner.Text()) 
     case 2: 
      secondLine = numbers(scanner.Text()) 
     } 
    } 
    fmt.Println(firstLine) 
    fmt.Println(secondLine) 
} 

輸出:

$ go run numbers.go 
1 2 3 
4 5 6 
[1 2 3] 
[4 5 6] 
$ 
1

所以,這是我落得這樣做。儘管如此,解決這個問題的方式可能更習慣。

package main 
import (
    "fmt" 
    "os" 
    "bufio" 
    "strings" 
    "strconv" 
) 

func main() { 

    scanner := bufio.NewScanner(os.Stdin) 

    scanner.Scan() 
    parts := strings.Split(scanner.Text(), " ") 
    lineOne := createIntSlice(parts) 

    scanner.Scan() 
    parts = strings.Split(scanner.Text(), " ") 
    lineTwo := createIntSlice(parts) 

    fmt.Println(lineOne) 
    fmt.Println(lineTwo) 
} 

func createIntSlice(nums []string) []int { 
    var r []int 
    for _, v := range nums { 
     i, _ := strconv.Atoi(v) 
     r = append(r, i) 
    } 
    return r 
} 
+1

在Go中,檢查返回值(['func(s * Scanner)Scan()bool'](https://golang.org/pkg/bufio/#Scanner.Scan))和錯誤(['func Atoi (s string)(int,error)'](https://golang.org/pkg/strconv/#Atoi))。 – peterSO

-1
package main 

import (
    "bufio" 
    "fmt" 
    "os" 
    "strings" 
) 

// You receive a string as parameter 
// List receives N As a string slice 
// Returns N as a string slice 
func number(n string) []string { 
    list := strings.Fields(n) 

    return list 
} 

func main() { 
    scanner := bufio.NewScanner(os.Stdin) //Receiving user data ... 

    list := make([][]string, 0) // Declare a slice to receive other slices inside it 

    for scanner.Scan() { // Scrolls all typed data to true 

     // If the user does not type anything, that is, if he presses Enter an interrupt will occur 
     if scanner.Text() == "" { 
      break 
     } else { 
      list = append(list, number(scanner.Text())) // Adding the slice inside list 
     } 
    } 

    fmt.Println(list) // print list 
} 

所有的數據都和返回的字符串,但您可以將它們轉換成整數容易。