1. Sissejuhatus
C-keeles kasutatakse vormindusmääreid arvude ja stringide kuvamiseks või sisestamiseks. Eriti ujukomaarvudega töötades on oluline mõista selliste määrangute nagu „%f” ja „%lf” erinevusi, et kirjutada täpset programmi. Selles artiklis keskendume topelttäpsusega ujukomaarvudele (double-tüüp) vastava „%lf” kasutamisele, selgitades selle kasutamist printf
ja scanf
funktsioonides ning erinevusi teiste määrangutega.
2. Mis on vormindusmäärang?
Vormindusmäärang on sümbol, mida kasutatakse C-keeles andmete kuvamise või sisestamise vormingu määramiseks. Õige määrangu kasutamine sobiva andmetüübiga võimaldab täpset andmete sisendit ja väljundit. Vaatame esmalt levinumaid vormindusmääreid ja nende vastavaid andmetüüpe.
Levinumad vormindusmäärajad ja vastavad andmetüübid
Vormindusmäärang | Vastav andmetüüp |
---|---|
%d | int-tüüp (täisarv) |
%f | float-tüüp (ühe täpsusega ujukomaarv) |
%lf | double-tüüp (topelttäpsusega ujukomaarv) |
%Lf | long double-tüüp (laiendatud topelttäpsusega ujukomaarv) |
3. „%lf” kasutamine printf-funktsioonis
C-keele printf
funktsiooni kasutatakse andmete kuvamiseks määratud vormingus. Kui kuvada topelttäpsusega ujukomaarvu printf
abil, võib kasutada nii „%f” kui ka „%lf”, kuid nende kasutamisel on väike erinevus.
Erinevus „%lf” ja „%f” vahel printf-is
printf
funktsioonis saab nii %f
kui ka %lf
kasutada double
-tüübi väljastamiseks. Seda seetõttu, et printf
teisendab ujukomaarvude argumendid automaatselt double
-tüübiks. Seetõttu on tavaks topelttäpsusega arvude väljastamisel kasutada „%f”.
Näide
#include <stdio.h>
int main() {
double num = 3.14159;
printf("%f\n", num); // Väljund: 3.141590
printf("%lf\n", num); // Väljund: 3.141590
return 0;
}
Nagu näites näha, annab mõlemad määrangud sama tulemuse, kuid printf
-is on standardiks %f
kasutamine double
-tüübi puhul.
4. „%lf” kasutamine scanf-funktsioonis
scanf
funktsioon salvestab sisestatud andmed määratud tüüpi muutujasse. scanf
-is peab määrang vastama muutuja andmetüübile ning siin tuleb eristada „%f” ja „%lf” kasutamist.
Erinevus „%lf” ja „%f” vahel scanf-is
- „%f”: kasutatakse siis, kui sisend salvestatakse
float
-tüüpi muutujasse. - „%lf”: kasutatakse siis, kui sisend salvestatakse
double
-tüüpi muutujasse.double
-tüübi puhul peab alati kasutama%lf
.
Näide
#include <stdio.h>
int main() {
double num;
printf("Sisesta arv: ");
scanf("%lf", &num); // Salvestab sisendi double-tüüpi muutujasse
printf("Sisestatud arv: %f\n", num);
return 0;
}
Seega tuleb scanf
-is topelttäpsusega ujukomaarvu sisestamiseks kasutada „%lf”. Kui kasutada ekslikult „%f”, võib programm käituda ootamatult.
5. Tähelepanekud „%lf” kasutamisel
„%lf” kasutamisel on eriti oluline, et scanf
-funktsioonis vastaks määrang muutuja tüübile. Kui need ei ühti, võib tekkida ootamatu käitumine või viga.
Levinud vead ja õige kasutus
Vale näide
Allpool olevas koodis kasutatakse %lf
float
-tüübi puhul, mis ei tööta korrektselt.
#include <stdio.h>
int main() {
float num;
printf("Sisesta arv: ");
scanf("%lf", &num); // Vale määrang
return 0;
}
Õige näide
Allpool kasutatakse õigesti „%lf” double
-tüübi puhul.
#include <stdio.h>
int main() {
double num;
printf("Sisesta arv: ");
scanf("%lf", &num); // Õige määrang
return 0;
}
scanf
-i kasutamisel peab alati tagama, et määrang vastaks muutuja andmetüübile.

6. Erinevused teiste vormindusmäärajatega
Lisaks „%lf”-ile on kasulik tunda ka teisi vormindusmääreid, et neid vajaduse järgi kasutada.
Peamised vormindusmäärajad ja nende kasutus
%f
: kasutataksefloat
-tüübi puhul (japrintf
-is kadouble
-tüübi puhul)%Lf
: kasutatakselong double
-tüübi puhul%e
/%E
: kasutatakse teadusliku märgenduse vormingus väljundiks
Näide ja erinevuste selgitus
#include <stdio.h>
int main() {
long double num_long_double = 3.14159265358979323846L;
printf("long double tüübi väljund: %Lf\n", num_long_double); // long double määrang
printf("Teaduslik märgendus: %e\n", num_long_double); // Teaduslik vorming
return 0;
}
Õige määrangu kasutamine vastavalt andmetüübile tagab väljundi täpsuse.
7. Kokkuvõte
Selgitasime C-keeles topelttäpsusega ujukomaarvu määrangut „%lf”. Järgnevaid punkte silmas pidades on võimalik kirjutada vähemate vigadega koodi.
printf
funktsioon: topelttäpsusega arvude jaoks võib kasutada „%f” või „%lf”, kuid tavaks on kasutada „%f”.scanf
funktsioon:double
-tüübi puhul tuleb kasutada „%lf”,float
-tüübi puhul „%f”. Määrang ja andmetüüp peavad kattuma.- Tähelepanek: vale määrangu kasutamine võib eriti
scanf
-is põhjustada ootamatut käitumist, seega on oluline, et määrang ja tüüp ühtiksid.