Struktūrinis programavimas
Pamoka 6 / 11 Duomenų tipai giliau ~35 min
1 / 4 📖 Teorija

Iš teksto į skaičių — Atoi ir patikra

Pereitą pamoką likom su problema: Scanln viską skaito kaip tekstą. "380" — tai simboliai 3, 8, 0, o ne skaičius 380. O jei vartotojas įves "abc"?

Vertėjas iš teksto į skaičių — strconv.Atoi („ASCII to integer"):

import "strconv"

n, err := strconv.Atoi(raw)
if err != nil {
	fmt.Println("Not a number.")
	continue // back to the menu — no crash
}

Pažįsti šitą formą? Tai 3 pamokos keli grąžinimai: Atoi grąžina (reikšmė, klaida). Jei tekstas nėra skaičius — err netuščias, o tu pats nusprendi, kas toliau. Jokio lūžimo, jokio spėliojimo.

Patikra retai baigiasi vien err != nil — reikšmė turi tilpti ir į tavo taisykles:

if err != nil || n < 0 || n > it.Pages {
	fmt.Println("Not a valid number of pages.")
	continue
}

„Skaičius" dar nereiškia „tinkamas skaičius": −5 perskaitytų puslapių arba 900 iš 380 — irgi klaidos.

Patarimas. err čia — tik ragavimas: visa klaidų valdymo sistema (error tipas, defer, failai) — 10 pamokoje. Šiandien užtenka šablono: paverčiau — patikrinau — arba naudoju, arba mandagiai atsisakau.