Iš teksto į skaičių — Atoi ir patikra
5 pamokoje readInt jau pavertė vartotojo tekstą skaičiumi — ir paklausė iš naujo įvedus blogai. Bet kaip jis konvertuoja, ir ką daryti su skaičiumi, kuris yra teisingas sveikasis, bet vis tiek klaidingas (pvz. 9999 perskaitytų puslapių 380 puslapių knygoje)? Atverkim jį.
readLine grąžina tekstą. "380" — tai simboliai 3, 8, 0, o ne skaičius 380. Vertėjas — strconv.Atoi („ASCII to integer"), būtent tas kvietimas, kuris slypi readInt viduje:
import "strconv"
n, err := strconv.Atoi(readLine())
if err != nil {
fmt.Println("Not a number.")
continue // klausiam vėl — jokio lūžio
}
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 (errortipas,defer, failai) — 10 pamokoje. Šiandien užtenka šablono: paverčiau — patikrinau — arba naudoju, arba mandagiai atsisakau.