1. scanf funktsiooni ülevaade
C programmeerimiskeele õppimisel on üks enim kasutatud meetodeid andmete sisestamiseks programmi scanf funktsioon. See toimib nagu programmi “kuulaja”, mis salvestab kasutaja sisestatud andmed määratud muutujatesse.
scanf põhisisu
scanf("formatSpecifier", &variable);
Siin on võtmeelemendid “formatSpecifier” ja muutuja ees olev ampersand (&). Formaatimääraja määrab sisestatava andmetüübi ning & näitab selle muutuja aadressi. Selle reegli järgimisel suudab scanf kasutaja sisendi õigesti töödelda.
int num;
scanf("%d", &num);
Sel viisil annab scanf programmile sisendi ja muudab need andmed kasutatavaks.
2. Enamasti kasutatavad formaadi määrajad
%d: täisarvude jaoks%f:floattüüpi ujukomaarvude jaoks%lf:doubletüüpi topelt täpsusega ujukomaarvude jaoks%s: stringide jaoks (lõpetatud tühikuga)%c: ühe tähe jaoks
double val;
scanf("%lf", &val);
3. Mitme sisendi töötlemine korraga
int age;
float height;
scanf("%d %f", &age, &height);
printf("Age: %d, Height: %.2fn", age, height);
4. Sisendi valideerimine ja veahaldus
int age;
printf("Please enter your age (0–120): ");
if (scanf("%d", &age) == 1 && age >= 0 && age <= 120) {
printf("The entered age is %d years.n", age);
} else {
printf("Invalid age.n");
}
5. Sisendvoo puhastamine
Kasutades scanf-i, võib tunduda, et “eelmine sisend jääb alles”. See juhtub, kuna reavahetuse märgid (\n) jne. jäävad sisendvoogu.
scanf("%*[^n]");
scanf("%*c");
See võimaldab sul vahele jätta kõik sisendpuhvris allesjäänud reavahetuse või muud märgid. Kuid tsükli töötlemise ajal tuleks vältida mittestandardset fflush(stdin), ning turvalisuse huvides kasutada ülaltoodud meetodeid.
6. Levinumad lõksud ja parimad tavad
- Vastav formaadi määraja: Viia andmetüüp ja määraja vastavusse
- Stringi pikkuse ettevaatlikkus: Kui sisestad
%s-ga, arvesta puhvri suurusega - Voo puhastamine: Vältida reavahetuse märkide järeljäänud jätmist
7. Täiustatud kasutus | Keerukad scanf tehnikad
char name[20];
printf("Please enter your name: ");
scanf("%19s", name); // buffer-safe measure
printf("Hello, %s!n", name);
Kokkuvõte
scanf funktsioon on C keeles põhiline sisendmeetod. Kui mõistad formaadi määrajaid, veakontrolli ja sisendvoo käsitlemist, saad seda turvaliselt kasutada. Pööra erilist tähelepanu allesjäänud sisendpuhvritele ja puhvri ületamise probleemidele.



