0Pricing
Go Academy · Lekcja

Skanowanie danych wejściowych

Odczytuj sformatowane dane wejściowe

Skanowanie danych wejściowych to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Odczytywanie danych wejściowych za pomocą fmt

Pakiet fmt potrafi nie tylko wypisywać wartości, ale również je odczytywać. Funkcje skanujące analizują tekst i zapisują go w zmiennych określonych typów.

Działają jak lustrzane odbicie funkcji wypisujących.

package main

import "fmt"

func main() {
    var n int
    fmt.Sscan("42", &n)
    fmt.Println(n + 1)
}

Wymagane są wskaźniki

Funkcje skanujące muszą zapisać wynik, dlatego należy przekazać adres każdej zmiennej za pomocą &.

Zapomnienie o & jest najczęstszym błędem podczas skanowania.

package main

import "fmt"

func main() {
    var a, b int
    fmt.Sscan("3 4", &a, &b)
    fmt.Println(a + b)
}

Sscan rozdziela dane spacjami

fmt.Sscan odczytuje rozdzielone spacjami wartości z łańcucha i zapisuje je w wielu zmiennych, określając typ na podstawie każdego wskaźnika.

package main

import "fmt"

func main() {
    var name string
    var age int
    fmt.Sscan("Ada 36", &name, &age)
    fmt.Println(name, age)
}

Sscanf używa formatu

fmt.Sscanf analizuje dane zgodnie z łańcuchem formatującym, podobnie jak Printf, ale w odwrotnym kierunku. Dosłowne znaki w formacie muszą odpowiadać znakom wejściowym.

package main

import "fmt"

func main() {
    var h, m int
    fmt.Sscanf("09:05", "%d:%d", &h, &m)
    fmt.Println(h, m)
}

Sprawdzanie liczby odczytanych wartości

Funkcje skanujące zwracają liczbę pomyślnie przeanalizowanych elementów oraz błąd. Należy sprawdzić tę liczbę, aby upewnić się, że analiza zakończyła się pełnym sukcesem.

package main

import "fmt"

func main() {
    var a, b int
    count, _ := fmt.Sscan("7", &a, &b)
    fmt.Println("parsed:", count)
}

Obsługa błędów analizy

Jeśli dane wejściowe nie odpowiadają oczekiwanemu typowi, zostanie zwrócony błąd. W przypadku rzeczywistych danych wejściowych należy zawsze go sprawdzać.

package main

import "fmt"

func main() {
    var n int
    _, err := fmt.Sscan("notanumber", &n)
    if err != nil {
        fmt.Println("error:", err)
    }
}

Analizowanie różnych typów

Podczas jednego wywołania można odczytać kilka różnych typów. Typ każdego wskaźnika określa sposób analizy odpowiadającego mu tokenu.

package main

import "fmt"

func main() {
    var word string
    var price float64
    var ok bool
    fmt.Sscan("apple 1.50 true", &word, &price, &ok)
    fmt.Println(word, price, ok)
}

Sscanf z dosłownym tekstem

Sscanf świetnie nadaje się do stałych struktur, takich jak współrzędne lub pary klucz-wartość, w których znaki interpunkcyjne rozdzielają liczby.

package main

import "fmt"

func main() {
    var x, y int
    fmt.Sscanf("(3,8)", "(%d,%d)", &x, &y)
    fmt.Println(x, y)
}

Odczytywanie liczb zmiennoprzecinkowych

Należy użyć %f w Sscanf lub *float64 w Sscan, aby odczytywać liczby dziesiętne.

package main

import "fmt"

func main() {
    var temp float64
    fmt.Sscanf("21.5C", "%fC", &temp)
    fmt.Println(temp)
}

Scan a standardowe wejście

fmt.Scan i fmt.Scanf odczytują dane ze standardowego wejścia w taki sam sposób, w jaki Sscan odczytuje je z łańcucha. Reguły analizy są identyczne — zmienia się tylko źródło danych.

package main

import "fmt"

func main() {
    line := "100 200"
    var a, b int
    fmt.Sscan(line, &a, &b)
    fmt.Println(a * b)
}

Mały parser

Połącz skanowanie z obliczeniem, aby przeanalizować rekord i uzyskać wynik.

package main

import "fmt"

func main() {
    var name string
    var qty int
    var unit float64
    fmt.Sscanf("pen 3 1.25", "%s %d %f", &name, &qty, &unit)
    fmt.Printf("%s total: $%.2f\n", name, float64(qty)*unit)
}

Szybkie sprawdzenie

Co należy przekazać funkcji skanującej, aby zapisać wynik?

Podsumowanie: skanowanie danych wejściowych

Poznałeś sposób odczytywania sformatowanych danych wejściowych:

  • Sscan rozdziela dane na podstawie białych znaków, a Sscanf działa zgodnie z łańcuchem formatującym.
  • Dla każdego miejsca docelowego należy przekazać wskaźnik za pomocą &.
  • Należy sprawdzić zwróconą liczbę elementów i błąd, aby wykryć nieprawidłowe dane wejściowe.
package main

import "fmt"

func main() {
    var d, mo, y int
    fmt.Sscanf("30/05/2026", "%d/%d/%d", &d, &mo, &y)
    fmt.Println(y, mo, d)
}

Często zadawane pytania

Czy lekcja „Skanowanie danych wejściowych” jest bezpłatna?

Tak — pełny tekst „Skanowanie danych wejściowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Skanowanie danych wejściowych”?

Odczytuj sformatowane dane wejściowe Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Skanowanie danych wejściowych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dyrektywy Printf
  2. Sprintf i Fprintf
  3. Interfejs Stringer
  4. Skanowanie danych wejściowych
← Powrót do Go Academy