Функция fmt.Sscanln
Функция fmt.Sscanln сканирует данные из строки и сохраняет их в переменные,
переданные в качестве аргументов. В отличие от fmt.Sscan, она останавливается
на первом символе новой строки (\n) или конце строки. Первым параметром
функция принимает строку для сканирования, последующие параметры -
указатели на переменные, в которые будут сохранены значения.
Синтаксис
func Sscanln(str string, a ...any) (n int, err error)
Пример
Давайте прочитаем из строки два целых числа и строку:
package main
import "fmt"
func main() {
str := "10 20 hello"
var a, b int
var s string
n, err := fmt.Sscanln(str, &a, &b, &s)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("a=%d, b=%d, s=%s, count=%d", a, b, s, n)
}
Результат выполнения кода:
"a=10, b=20, s=hello, count=3"
Пример
Давайте посмотрим, что происходит, когда строка содержит символ новой строки:
package main
import "fmt"
func main() {
str := "10 20\n30 40"
var a, b int
n, err := fmt.Sscanln(str, &a, &b)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("a=%d, b=%d, count=%d", a, b, n)
}
Результат выполнения кода:
"a=10, b=20, count=2"
Как видите, функция прочитала только первую строку до символа \n.
Пример
Давайте рассмотрим случай, когда количество аргументов не совпадает с количеством значений в строке:
package main
import "fmt"
func main() {
str := "10 20 30"
var a, b int
n, err := fmt.Sscanln(str, &a, &b)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("a=%d, b=%d, count=%d", a, b, n)
}
Результат выполнения кода:
"expected 2 items but got 3"
Функция вернула ошибку, так как в строке больше значений, чем переменных для сканирования.
Смотрите также
-
функцию
fmt.Sscan,
которая сканирует всю строку без ограничений по символам -
функцию
fmt.Sscanf,
которая сканирует строку по заданному формату -
функцию
fmt.Scanln,
которая читает данные из стандартного ввода до новой строки -
функцию
fmt.Fscanln,
которая читает данные из любого ввода до новой строки