- 1 1. Mis on getchar funktsioon?
- 2 2. getchar funktsiooni põhiline kasutamine
- 3 3. getchar funktsiooni praktilised näited
- 4 4. EOF ja puhverdatud sisend
- 5 5. getchar funktsioon vs teised sisendfunktsioonid
- 6 6. Praktika: interaktiivne programm getchar abil
- 7 7. getchar funktsiooni probleemid ja parimad praktikad
- 8 8. Kokkuvõte ja järgmised sammud
1. Mis on getchar funktsioon?
getchar
funktsioon on üks põhilisi sisestusmeetodeid C programmeerimiskeeles – see loeb ühe märgi standardse sisendi kaudu. Kui kasutaja sisestab klaviatuurilt märgi, tagastab see funktsioon selle märgi ASCII koodi, mis teeb selle mugavaks lihtsate sisestustoimingute jaoks. Näiteks kasutatakse seda, kui on vaja töödelda kasutaja sisestatud märke ükshaaval.
getchar funktsiooni omadused
- Võtab vastu ühe märgi standardse sisendi kaudu: ootab, kuni kasutaja sisestab märgi ja vajutab Enter-klahvi, seejärel alustab töötlemist.
- Tagastab ASCII koodi: loetud märk tagastatakse ASCII koodina, mitte märgina. Märgina kasutamiseks tuleb see vajadusel teisendada.
getchar
on eriti sobiv lihtsate kasutajasise sisestusülesannete või interaktiivsete programmide jaoks. Seda kasutatakse sageli C keele õppimise algstaadiumis, kuna seda on lihtne kasutada võrreldes teiste sisendfunktsioonidega.
Näide kasutamisest
Allpool on toodud lihtne sisestusnäide, kus kasutatakse getchar
funktsiooni.
#include <stdio.h>
int main() {
int c;
printf("Sisesta märk: ");
c = getchar();
printf("Sisestatud märk: %c\n", c);
return 0;
}
Selles programmis loetakse kasutaja sisestatud üks märk klaviatuurilt ja kuvatakse see ekraanile. Kui näiteks sisestada “A”, on väljund järgmine:
Sisesta märk: A
Sisestatud märk: A
2. getchar funktsiooni põhiline kasutamine
Põhifunktsiooni kutsumine
getchar
funktsiooni kasutatakse järgmiselt:
int getchar(void);
See ei võta argumente, loeb ühe märgi ja tagastab selle ASCII koodi. Tagastustüüp on täisarv (int
) ning vea korral tagastab EOF
(End Of File).
Lihtne märgi sisestuse näide
Ülaltoodud näites loeti üks märk ja kuvati see ekraanile. getchar
sobib hästi juhul, kui on vaja töödelda ainult ühte märki.
#include <stdio.h>
int main() {
int c;
printf("Sisesta märk: ");
c = getchar();
printf("Sisestatud märk: %c\n", c);
return 0;
}
Selles koodis loeb getchar
sisestatud märgi ja printf
kuvab selle ekraanile.
3. getchar funktsiooni praktilised näited
EOF (faili lõpp) ja getchar
getchar
ei loe ainult märke, vaid tagastab EOF
(End Of File), kui sisendi lõpp on saavutatud. Näiteks saab tuvastada EOF, kui kasutaja vajutab “Ctrl+Z” (Windows) või “Ctrl+D” (Unix).
Järgmine näide loeb märke seni, kuni sisestatakse EOF.
#include <stdio.h>
int main() {
int c;
printf("Sisesta märke (lõpetamiseks EOF): ");
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
See kood kasutab getchar
ja putchar
funktsioone, et kuvada iga sisestatud märk ekraanile kuni EOF sisestamiseni.
Mitme märgi sisestamine
Mitut märki saab lugeda getchar
abil, näiteks kuni reavahetusmärgi (newline) sisestamiseni. Alltoodud kood kuvab iga sisestatud märgi seni, kuni vajutatakse Enter-klahvi.
#include <stdio.h>
int main() {
int c;
printf("Sisesta sõne: ");
while ((c = getchar()) != '\n') {
printf("Sisestatud märk: %c\n", c);
}
return 0;
}
See programm loeb märke ükshaaval ja kuvab need ekraanile. Tsükkel lõpeb, kui sisestatakse reavahetus.

4. EOF ja puhverdatud sisend
EOF tähendus
EOF (End Of File) tähistab faili või sisendi lõppu. getchar
tagastab -1
, kui jõuab EOF-i, ning programm saab selle põhjal töö lõpetada. Klaviatuurilt saab EOF-i sisestada spetsiaalse klahvikombinatsiooniga.
Puhverdamine ja getchar
getchar
kasutab sisendi puhverdamist – kõik sisestatud märgid salvestatakse puhvris. Kui getchar
kutsutakse mitu korda, tagastatakse järgmine märk puhvrist. Seetõttu ei liigu programm edasi enne, kui sisestatakse reavahetus (Enter).
Puhvris oleva reavahetuse eiramiseks saab kasutada järgmist tehnikat:
#include <stdio.h>
int main() {
int c;
printf("Sisesta märk: ");
c = getchar();
while (getchar() != '\n'); // Eirab puhvris olevat reavahetust
printf("Sisestatud märk: %c\n", c);
return 0;
}
See kood eirab puhvris olevat reavahetusmärki enne sisestatud märgi kuvamist.
5. getchar funktsioon vs teised sisendfunktsioonid
Erinevus getchar ja scanf vahel
Nii getchar
kui ka scanf
loevad sisendit, kuid nende kasutusviisid erinevad. scanf
võimaldab kasutada vormindajat, et sisestada täisarve, ujukomaga arve, sõne jne. getchar
on seevastu väga lihtne – see loeb ainult ühe märgi.
Näide sisestusest scanf abil:
#include <stdio.h>
int main() {
int num;
printf("Sisesta arv: ");
scanf("%d", &num);
printf("Sisestatud arv: %d\n", num);
return 0;
}
See kood kasutab scanf
täisarvu lugemiseks ja kuvamiseks. scanf
sobib erinevate andmetüüpide ning mitme väärtuse üheaegseks sisestamiseks.
Erinevus getchar ja fgets vahel
fgets
erineb getchar
-ist selle poolest, et loeb korraga mitu märki (sõne). See on väga mugav, kui on vaja lugeda kasutaja sisestatud tekstiridu. fgets
võimaldab määrata puhvrimahu ja aitab vältida bufrioverflow probleeme, mis võivad scanf
-i kasutamisel tekkida.
Näide sisestusest fgets abil:
#include <stdio.h>
int main() {
char str[100];
printf("Sisesta sõne: ");
fgets(str, sizeof(str), stdin);
printf("Sisestatud sõne: %s", str);
return 0;
}
See kood loeb ja kuvab sõne, kasutades fgets
. fgets
loeb kogu rea (kuni reavahetuseni), seega sobib see ka mitmerealise sisendi töötlemiseks.
getchar, scanf ja fgets kasutusviisid
- getchar sobib ühe märgi sisendi töötlemiseks – näiteks menüüvalikute või klahvivajutuste jaoks.
- scanf sobib mitut tüüpi andmete (arvud, sõned) lugemiseks, kuid vajab põhjalikku veakontrolli.
- fgets sobib pikkade sõnede või mitmerealiste andmete lugemiseks. Lisaks saab määrata, mitu märki korraga loetakse, mis aitab vältida bufrioverflow’d.
6. Praktika: interaktiivne programm getchar abil
getchar
on kasulik kasutaja sisendi põhjal töötavate interaktiivsete programmide loomiseks. Allpool on näide, kuidas kindla klahvivajutuse peale sooritada erinevaid toiminguid – see on kasulik näiteks lihtsa menüü või mängu loomiseks.
Näidiskood: menüü juhtimine märgi sisestusel
#include <stdio.h>
int main() {
char choice;
printf("Vali menüü (a: Tere, b: Välju): ");
choice = getchar();
switch (choice) {
case 'a':
printf("Tere!\n");
break;
case 'b':
printf("Programm lõpetatakse.\n");
break;
default:
printf("Vigane valik.\n");
}
return 0;
}
Selles programmis saab kasutaja sisestada kas ‘a’ või ‘b’ ja vastavalt kuvatakse sõnum. getchar
võimaldab lihtsa menüü teostust ning kasutaja sisendile reageerimist.
Edasijõudnud programm: mitu käsku
Alljärgnev kood sooritab erinevaid toiminguid sõltuvalt sisestatud käsust (näiteks ‘l’, ‘h’, ‘q’).
#include <stdio.h>
int main() {
char command;
printf("Sisesta käsk (l: kuva nimekiri, h: tervitus, q: välju): ");
command = getchar();
switch (command) {
case 'l':
printf("Nimekiri kuvatakse.\n");
break;
case 'h':
printf("Tere!\n");
break;
case 'q':
printf("Programm lõpetatakse.\n");
break;
default:
printf("Vigane käsk.\n");
}
return 0;
}
Selles programmis täidetakse erinevad toimingud sõltuvalt kasutaja sisestatud käsust (l
, h
, q
).
7. getchar funktsiooni probleemid ja parimad praktikad
Levinud probleem: puhvri töötlemine
getchar
kasutamisel on oluline arvestada, et sisendi puhvris olevad andmed võivad mõjutada järgmist sisestust. Näiteks pärast ühte getchar
väljakutset võib järgmine getchar
lugeda puhvris olevat reavahetusmärki. Selliste olukordade vältimiseks tuleb vajadusel puhverdada sisend.
Kuidas eirata reavahetust:
#include <stdio.h>
int main() {
int c;
printf("Sisesta märk: ");
c = getchar();
while (getchar() != '\n'); // Eirab reavahetust
printf("Sisestatud märk: %c\n", c);
return 0;
}
Selles koodis kasutatakse while
tsüklit, et lugeda ja eirata puhvris olev reavahetus, enne kui kuvatakse sisestatud märk.
Parimad praktikad
- Puhvri tühjendamine: veendu, et sisestuse ajal töödeldakse puhvris olev reavahetus, et see ei mõjutaks järgmist sisestust.
- Veakontroll: kui
getchar
tagastabEOF
, töödelda seda korrektselt – eriti failisisestuse korral. - Sisendi piirangud: pikkade sõnede või teatud tingimustega sisendi puhul tasub kaaluda
fgets
kasutamist, kuna sellega saab piirata sisestatavate märkide arvu ja vältida bufrioverflow’d.
8. Kokkuvõte ja järgmised sammud
Selles artiklis tutvustati getchar
funktsiooni põhikasutust ja praktilisi näiteid ning võrreldi seda scanf
ja fgets
funktsioonidega. getchar
on lihtne, kuid võimas tööriist, mis sobib hästi interaktiivsete programmide ja lihtsate sisestuste jaoks.
Edasised sammud
- fgets ja scanf sügavam kasutamine: kui soovid töödelda sõnede või arvude sisestust, tasub õppida ka
fgets
jascanf
kasutamist. - Failisisend:
getchar
töötab nii standardse sisendi kui ka failide lugemisel – failide sisestuse õppimine laiendab võimalusi. - Veakontrolli praktika: korrektselt käidelda sisestusvigu (
EOF
või vigane sisestus), et programm oleks töökindel.
C-keele põhitõdede omandamisel aitab nende teadmiste süvendamine luua praktilisi ja usaldusväärseid programme.