Функция fmt.Scanln

Функция fmt.Scanln считывает данные из стандартного ввода до символа новой строки. Она сканирует текст, разделенный пробелами, и сохраняет значения в переданные аргументы. В отличие от функции fmt.Scan, которая игнорирует символы новой строки, fmt.Scanln останавливает чтение при встрече с \n. Первый параметр функции - это указатели на переменные, в которые будут сохранены считанные значения. Функция возвращает количество успешно считанных элементов и ошибку, если она возникла.

Синтаксис

gofmt.Scanln(a ...interface{}) (n int, err error)

Пример

Давайте считаем имя и возраст пользователя в одной строке:

gopackage main

import "fmt"

func main() {
  var name string
  var age int

  fmt.Print("Enter name and age: ")
  n, err := fmt.Scanln(&name, &age)

  fmt.Printf("Scanned: %d items\n", n)
  fmt.Printf("Error: %v\n", err)
  fmt.Printf("Name: %s, Age: %d\n", name, age)
}

Результат выполнения кода при вводе "Alice 25":

go"Enter name and age: Alice 25"
"Scanned: 2 items"
"Error: <nil>"
"Name: Alice, Age: 25"

Пример

Давайте рассмотрим случай, когда вводится меньше значений, чем ожидается:

gopackage main

import "fmt"

func main() {
  var name string
  var age int

  fmt.Print("Enter name and age: ")
  n, err := fmt.Scanln(&name, &age)

  fmt.Printf("Scanned: %d items\n", n)
  fmt.Printf("Error: %v\n", err)
  fmt.Printf("Name: %s, Age: %d\n", name, age)
}

Результат выполнения кода при вводе "Bob":

go"Enter name and age: Bob"
"Scanned: 1 items"
"Error: expected newline"
"Name: Bob, Age: 0"

Пример

Давайте используем fmt.Scanln для чтения нескольких строк:

gopackage main

import "fmt"

func main() {
  var first string
  var second string

  fmt.Print("Enter first line: ")
  fmt.Scanln(&first)

  fmt.Print("Enter second line: ")
  fmt.Scanln(&second)

  fmt.Printf("First: %s\n", first)
  fmt.Printf("Second: %s\n", second)
}

Результат выполнения кода при вводе "Hello" и "World":

go"Enter first line: Hello"
"Enter second line: World"
"First: Hello"
"Second: World"

Смотрите также

  • функцию fmt.Scan,
    которая сканирует текст, игнорируя символы новой строки
  • функцию fmt.Scanf,
    которая сканирует данные по указанному формату
  • функцию fmt.Println,
    которая выводит данные в стандартный вывод с добавлением новой строки
  • функцию fmt.Print,
    которая выводит данные без добавления новой строки