РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
642 of 1593 menu

Функция fmt.Fscanln

Функция fmt.Fscanln сканирует данные, прочитанные из переданного интерфейса io.Reader, и записывает их в переданные указатели. В качестве первого параметра она принимает источник данных (например, strings.Reader или bytes.Buffer), а в последующие параметры — указатели на переменные, в которые будут сохранены значения. Функция считывает данные до символа новой строки и ожидает, что количество переданных аргументов будет соответствовать количеству значений в строке.

Синтаксис

func Fscanln(r io.Reader, a ...any) (n int, err error)

Пример

Давайте прочитаем строку с тремя значениями из strings.Reader:

package main import ( "fmt" "strings" ) func main() { s := "Go 1.21 true" reader := strings.NewReader(s) var lang string var version float32 var active bool res, err := fmt.Fscanln(reader, &lang, &version, &active) if err != nil { fmt.Println("Error:", err) return } fmt.Println("Res:", res) fmt.Println("Lang:", lang) fmt.Println("Version:", version) fmt.Println("Active:", active) }

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

"Res: 3" "Lang: Go" "Version: 1.21" "Active: true"

Пример

Попробуем прочитать две строки из strings.Reader:

package main import ( "fmt" "strings" ) func main() { s := "Alice 25\nBob 30" reader := strings.NewReader(s) var name string var age int res, err := fmt.Fscanln(reader, &name, &age) if err != nil { fmt.Println("Error:", err) return } fmt.Println("Res:", res) fmt.Println("Name:", name) fmt.Println("Age:", age) }

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

"Res: 2" "Name: Alice" "Age: 25"

Функция прочитала только первую строку до символа новой строки, вторая строка осталась непрочитанной.

Пример

Давайте рассмотрим случай, когда количество переменных не соответствует количеству значений:

package main import ( "fmt" "strings" ) func main() { s := "1 2 3" reader := strings.NewReader(s) var a, b int res, err := fmt.Fscanln(reader, &a, &b) if err != nil { fmt.Println("Error:", err) fmt.Println("Res before error:", res) return } fmt.Println("Res:", res) fmt.Println("A:", a) fmt.Println("B:", b) }

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

"Error: expected newline" "Res before error: 2"

Функция возвращает ошибку, так как количество значений в строке больше, чем количество аргументов.

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

  • функцию fmt.Fscan,
    которая читает данные из io.Reader без привязки к строке
  • функцию fmt.Fscanf,
    которая читает из io.Reader с использованием форматной строки
  • функцию fmt.Sscanln,
    которая читает данные из строки по строкам
  • функцию fmt.Scanln,
    которая читает данные из стандартного ввода по строкам
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить