Konsoldan ma’lumot kiritish
Hozirgacha dastur ishlatadigan qiymatlarni kodning ichida yozdik. Amaliy dastur esa ko‘pincha foydalanuvchidan ism, son yoki boshqa ma’lumotni qabul qilishi kerak.
Bu darsda terminaldan qiymat o‘qish, uni o‘zgaruvchiga saqlash va noto‘g‘ri kiritishni tekshirishni o‘rganamiz.
fmt.Scan() bilan qiymat o‘qish
Quyidagi dastur foydalanuvchidan yoshini so‘raydi:
| main.go | |
|---|---|
Dasturni ishga tushiring:
Terminalda so‘rov chiqqach, masalan, 25 yozib Enter tugmasini bosing:
fmt.Print() matnni chiqaradi, lekin keyingi qatorga o‘tmaydi. Shu sababli foydalanuvchi qiymatni so‘rovning yoniga yozadi. fmt.Println() esa natijadan keyin yangi qatorga o‘tadi.
& belgisi nima qiladi?
var yosh int o‘zgaruvchini yaratadi va unga 0 nol qiymatini beradi. fmt.Scan(&yosh) terminaldan qiymat o‘qib, uni shu o‘zgaruvchiga yozadi.
&yosh — yosh o‘zgaruvchisining xotiradagi manzili. Scan()ga manzil beriladi, chunki funksiya o‘qigan qiymatini aynan qaysi o‘zgaruvchiga yozishni bilishi kerak.
Hozircha &ni “qiymatni shu o‘zgaruvchiga yoz” degan ko‘rsatma sifatida tushunish yetarli. Xotira manzili va pointerlar keyingi alohida darsda batafsil tushuntiriladi.
Warning
fmt.Scan(yosh) emas, fmt.Scan(&yosh) yoziladi. & bo‘lmasa, Scan() o‘zgaruvchiga yangi qiymat yoza olmaydi va xato qaytaradi.
Kiritishdagi xatoni tekshirish
Foydalanuvchi yosh o‘rniga salom deb yozishi mumkin. Bunday holatni tekshirmasak, dastur yoshning eski qiymati bilan davom etadi.
fmt.Scan() ikkita natija qaytaradi:
- muvaffaqiyatli o‘qilgan qiymatlar soni;
- kiritishda yuz bergan xato.
| main.go | |
|---|---|
To‘g‘ri qiymat kiritilsa:
Matn kiritilsa:
err != nil kiritishda xato borligini tekshiradi. return esa main() funksiyasini shu joyda tugatadi. if sharti keyingi darslarda batafsil tushuntiriladi; bu misolda uning vazifasi xato bo‘lsa dasturni davom ettirmaslik.
Bir nechta qiymat o‘qish
Scan()ga bir nechta o‘zgaruvchining manzilini berish mumkin. Qiymatlar terminalda bo‘sh joy yoki yangi qator bilan ajratiladi:
Kiritish va natija:
_ bo‘sh identifikator (blank identifier) deyiladi. Bu misolda o‘qilgan qiymatlar soni kerak emas, shuning uchun uni _ orqali e’tiborsiz qoldirdik. Xatoni esa err orqali tekshirdik.
Qiymatlarni alohida qatorlarda ham kiritish mumkin:
Bitta so‘zdan iborat matnni o‘qish
fmt.Scan() matnni bo‘sh joygacha o‘qiydi. Bitta so‘z, login yoki kod kabi qiymatlar uchun bu qulay:
| main.go | |
|---|---|
Natija:
Foydalanuvchi Ali Valiyev deb kiritsa, ismga faqat Ali yoziladi. To‘liq qator uchun boshqa usul kerak.
Bo‘sh joyli qatorni o‘qish
To‘liq ism yoki gap kabi bo‘sh joyli matnni bufio.Reader yordamida bir qator qilib o‘qish mumkin:
Natija:
Bu dasturda:
os.Stdinterminaldan keladigan ma’lumot oqimini bildiradi;bufio.NewReader()shu oqimdan qulay o‘qish vositasini yaratadi;ReadString('\n')Enterbosilganda keladigan yangi qator belgisigacha o‘qiydi;strings.TrimSpace()matn boshidagi va oxiridagi bo‘sh joy hamda yangi qator belgisini olib tashlaydi.
ReadString() Windows, Linux va macOS’da qatorni o‘qiydi. TrimSpace() qator oxiridagi farqlarni tozalaydi.
Scan() va qator o‘qishni aralashtirish
fmt.Scan() sonni o‘qiganda qator oxiridagi Enter belgisi kirish oqimida qolishi mumkin. Undan keyin ReadString('\n') ishlatilsa, u qolgan bo‘sh qatorni darhol o‘qib olishi ehtimoli bor.
Yangi boshlaganda bitta dastur ichida bir xil usuldan foydalanish qulay:
- alohida so‘zlar va sonlar uchun
fmt.Scan(); - to‘liq qatorlar uchun
bufio.Reader.
Murakkab kiritishda butun qatorni avval matn sifatida o‘qib, keyin kerakli turga aylantirish ishonchliroq bo‘ladi.
Kiritilgan qiymatni tekshirish
Qiymatning turi to‘g‘ri bo‘lishi uning mazmuni ham to‘g‘ri degani emas. Masalan, -5 butun son, ammo yosh sifatida yaroqsiz.
Bu yerda ikki xil tekshiruv bor:
Scan()qiymatniintsifatida o‘qiy oldimi;- o‘qilgan son ruxsat etilgan oraliqdami.
Birinchisi kiritish xatosini, ikkinchisi esa qiymatning dastur qoidalariga mosligini tekshiradi. Tashqaridan kelgan ma’lumotga ishonishdan oldin ikkala tekshiruv ham muhim.
Xulosa
fmt.Scan() terminaldan bo‘sh joy bilan ajratilgan qiymatlarni o‘qiydi. Qiymat yoziladigan o‘zgaruvchi & bilan beriladi. Scan() qaytargan errni tekshirish noto‘g‘ri kiritishni aniqlashga yordam beradi. Bo‘sh joyli to‘liq qatorlar uchun bufio.Reader va ReadString() ishlatiladi.
Keyingi darsda operatorlar va kiritilgan sonlardan foydalanib sodda matematik hisob-kitoblarni ko‘rib chiqamiz.