scanf-funktsiooni meisterlik kasutamine C-s: vormindusspetsiifikaatorid, sisendi valideerimine ja levinud lõksud

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 : float tüüpi ujukomaarvude jaoks
  • %lf : double tüü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.