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:
Sscanrozdziela dane na podstawie białych znaków, aSscanfdział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
- Dyrektywy Printf
- Sprintf i Fprintf
- Interfejs Stringer
- Skanowanie danych wejściowych