Как получить ввод с пробелами в golang - PullRequest
0 голосов
/ 01 мая 2020

Я хотел получить данные от пользователя на основе пробела в golang. Текущий код: ...

fmt.Scanf("%d\n", &N)
var a [10]int
for n := 0; n < N; n++ {
    fmt.Scanf("%d\n", &a[n])
}

Этот код позволяет мне принимать ввод в терминале, как ...

5
1
2
3
4
5

Итак, [] = {1,2,3 , 4,5} Но я хотел бы получить ввод в терминале, как ...

5
1 2 3 4 5

Итак, a [] = {1,2,3,4,5} Поэтому, пожалуйста, помогите найти, что я должен измениться в for-l oop выше.

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Спасибо, martinomburajr & Casey Flynn.

Я просмотрел ваши ответы и сделал свой собственный метод проб и ошибок. И наконец нашел somultion.

var N int
fmt.Scanf("%d\n", &N)
a := make([]int, N)
for n := range a {
    fmt.Scanf("%d", &a[n])
}
fmt.Scanf("\n")

И он отлично работает для моего требования. Большое спасибо за помощь.

0 голосов
/ 01 мая 2020

Вы можете попробовать что-то вроде этого. Это будет читать первое число, которое является размером массива, который вы хотите создать, затем на следующей строке будут элементы длины (n) в массиве

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

func main() {
  reader := bufio.NewReaderSize(os.Stdin, 1024 * 1024)

  nTemp, err := strconv.ParseInt(readLine(reader), 10, 64)
  checkError(err)
  n := int32(nTemp)

  arrTemp := strings.Split(readLine(reader), " ")

  var arr []int32

  for i := 0; i < int(n); i++ {
      arrItemTemp, err := strconv.ParseInt(arrTemp[i], 10, 64)
      checkError(err)
      arrItem := int32(arrItemTemp)
      arr = append(arr, arrItem)
  }

  fmt.Printf("%#v, arr", arr)
}

Так что, когда я пытаюсь с вашим например:

5
1 2 3 4 5

// I get the following:
[]int32{1, 2, 3, 4, 5}, arr

Заданный вами вопрос, кажется, часто встречается на таких сайтах, как Hackerrank в любом из представленных вопросов.

...