8. Vstup: InputB, InputC, InputI, InputS
Na čo to je
Doteraz program vedel len to, čo si mu napísal do zdrojáka. Rutiny vstupu počkajú, kým používateľ niečo napíše na klávesnici a stlačí RETURN (Enter), a napísanú hodnotu odovzdajú programu.
Ako sa to píše
| Rutina | Čo načíta | Ako sa použije |
|---|---|---|
InputB() | číslo 0 až 255 | age=InputB() |
InputC() | číslo 0 až 65535 | year=InputC() |
InputI() | číslo so znamienkom | temperature=InputI() |
InputS(text) | riadok textu | InputS(name) |
Prvé tri sú funkcie: vrátia hodnotu a tú priradíš do premennej. Písmená B, C, I znamenajú zase BYTE, CARD, INT.
InputS je procedúra: text uloží do premennej, ktorú jej dáš v zátvorkách. Na text nestačí BYTE ani CARD – treba miesto pre viac znakov:
CHAR ARRAY name(40)To je pole znakov s miestom pre 40 bajtov: jeden si Action! vezme na dĺžku textu, ostane 39 znakov. Poliam a reťazcom sa venujú kapitoly 18 a 19; tu stačí vedieť, že takto sa deklaruje premenná na text a že sa dá vypísať cez Print(name).
Celý program
Súbor examples/input.act:
; A program that asks
PROC Main()
CHAR ARRAY name(40) ; room for a text of up to 39 characters
BYTE age
CARD year
Print("What is your name? ")
InputS(name)
Print("How old are you? ")
age=InputB()
Print("What year is it? ")
year=InputC()
PutE()
Print("Hello, ")
Print(name)
PrintE("!")
Print("You were born in ")
PrintC(year-age)
PrintE(" or the year before.")
RETURNPreklad a spustenie
action26 input.act --simV simulátore píšeš odpovede na klávesnici svojho počítača. V emulátore (--run) na klávesnici Atari.
Čo uvidíš
Program sa trikrát opýta. To, čo píšeš ty, je v ukážke za otáznikom:
What is your name? Pedro
How old are you? 12
What year is it? 2026
Hello, Pedro!
You were born in 2014 or the year before.Ako to funguje
Print("What is your name? ")vypíše otázku a nechá kurzor na riadku, aby sa odpoveď písala hneď za ňu. Preto tu nie jePrintE.InputS(name)počká na riadok textu a uloží ho doname.age=InputB()počká na riadok, prevedie ho na číslo a uloží doage. Prázdne zátvorky zaInputBsú povinné – je to volanie funkcie.PrintC(year-age)ukazuje, že do zátvoriek rutiny nemusí ísť len premenná: môže tam byť celý výraz.yearjeCARD, takže výsledok jeCARDa patrí doPrintC.
Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
| používateľ napíše písmená tam, kde program čaká číslo | funkcia vráti 0 |
číslo sa nezmestí (300 do InputB) | vráti zvyšok, 44 – ako pri priradení |
chýbajú zátvorky (age=InputB) | prekladač mlčí; do age sa uloží kus adresy rutiny, nie odpoveď |
| text je dlhší ako miesto v poli | program si prepíše vlastnú pamäť a zvyčajne spadne |
Rutiny vstupu nekontrolujú, čo používateľ napísal. Číselný vstup číta číslice, kým nenarazí na iný znak: 12abc dá 12, abc dá 0.
Pole na text rob radšej väčšie. Riadok na obrazovke Atari má 40 znakov, ale používateľ môže písať ďalej – jeden vstup môže mať až 120 znakov. Kto chce mať istotu, použije CHAR ARRAY name(121).
Vyskúšaj si
- Pridaj otázku na obľúbené číslo a vypíš jeho dvojnásobok.
- Načítaj dve čísla a vypíš ich súčet, rozdiel, súčin a podiel.
- Zmeň
age=InputB()naage=InputI()a zadaj záporný vek. Čo vypíše program a prečo? (PremennáagejeBYTE.)
Zhrnutie
InputB(),InputC(),InputI()vrátia číslo napísané na klávesnici.InputS(pole)uloží napísaný text do poľa znakov.- Otázku píš cez
Print, niePrintE, aby odpoveď stála za ňou. - Vstup sa nekontroluje: zlé číslo je 0, pridlhý text prepíše pamäť.
Späť: 7. Počítanie · Ďalej: 9. Podmienka