fprintf
Főnév
fprintf (tsz. fprintfs)
- (informatika) A C programozási nyelv egyik legfontosabb funkciója az adatok kiírása, legyen az a képernyőre, fájlba vagy bármilyen más kimenetre. A standard könyvtár része az
fprintffüggvény, amely lehetővé teszi, hogy formázott szöveget írjunk egy adott fájltípusú mutató (FILE *) által megnyitott fájlba vagy más kimenetre.
Mi az az fprintf?
Az fprintf a C standard I/O (input/output) függvények egyike, amely a stdio.h könyvtárban található, és az adott fájlra (fájlmutató által) ír ki formázott szöveget.
Függvény prototípusa
int fprintf(FILE *stream, const char *format, ...);
- stream: Egy pointer, amely egy megnyitott fájlra (pl. fájl, stdout, stderr) mutat.
- format: Egy formátumsztring, amely meghatározza, hogy milyen formában írjuk ki az adatokat.
- A … azt jelenti, hogy változó számú argumentumot fogad (variadic function), amelyek a formátumsztringben megadott helyekre kerülnek beillesztésre.
A függvény visszatérési értéke a kiírt karakterek száma, vagy negatív érték, ha hiba történt.
Mire használható az fprintf?
- Fájlba történő írás, például adatok naplózása, eredmények mentése.
- Speciális kimenetekre írás, pl. standard output (
stdout), standard error (stderr). - Formázott szöveg előállítása fájlok számára.
- Az
printf-hez hasonlóan tetszőleges formátumban írhatunk szöveget, számokat, lebegőpontos értékeket, karaktereket, stb.
Hogyan működik?
Az fprintf az első paraméterben kapott fájlmutatót használja arra, hogy oda írja a formázott szöveget. A formátumsztringet feldolgozza, a %-jelek után szereplő formátumjelölőkkel behelyettesíti a további argumentumokat, majd ezt a kész szöveget a fájlba írja.
Formátumsztring és formátum specifikátorok
A formátumsztring egy olyan karakterlánc, amely tartalmazhat normál szöveget és speciális formázási utasításokat, amelyek %-szimbólummal kezdődnek.
Leggyakoribb formátum specifikátorok:
| Formátum | Leírás | Példa |
|---|---|---|
%d vagy %i |
Egész szám (int) | 123 |
%u |
Előjel nélküli egész szám (unsigned int) | 456 |
%f |
Lebegőpontos szám (float, double) | 3.14159 |
%lf |
Lebegőpontos szám (double) | 3.14159 |
%c |
Karakter | A |
%s |
Karakterlánc (string) | "Hello" |
%x, %X |
Hexadecimális szám (kis/nagybetűs) | 1a3f / 1A3F |
%o |
Oktális szám | 0755 |
%% |
Literál százalékjel | % |
Példa formázott sztringre:
fprintf(fajl, "Nevem %s, eletkorom %d ev, magassagom %.2f cm.\n", "Janos", 30, 175.5);
Ez a kimenet így néz ki a fájlban:
Nevem Janos, eletkorom 30 ev, magassagom 175.50 cm.
Példa fprintf használatra fájlba íráshoz
#include <stdio.h>
int main() {
FILE *fajl = fopen("adatok.txt", "w"); // megnyitás írásra
if (fajl == NULL) {
perror("Fajl megnyitasi hiba");
return 1;
}
int szam = 123;
double pi = 3.14159;
char nev[] = "Anna";
fprintf(fajl, "Szam: %d\n", szam);
fprintf(fajl, "Pi erteke: %.3f\n", pi);
fprintf(fajl, "Nev: %s\n", nev);
fclose(fajl); // fájl bezárása
return 0;
}
Ebben a példában az adatok.txt fájl tartalma a következő lesz:
Szam: 123 Pi erteke: 3.142 Nev: Anna
Mi a különbség az fprintf, printf és sprintf között?
| Függvény | Kimenet helye | Használat jellemzői |
|---|---|---|
printf |
Standard output (képernyő) | Egyszerű, képernyőre írás |
fprintf |
Tetszőleges FILE*-ra |
Fájlba vagy más stream-re írás |
sprintf |
Karakter tömbbe (string) | Stringbe írás, nem közvetlen kiírás |
Például:
printf("Hello, %s!\n", nev);— képernyőre ír.fprintf(fajl, "Hello, %s!\n", nev);— fájlba ír.sprintf(buffer, "Hello, %s!", nev);— egy karaktertömbbe írja, későbbi feldolgozásra.
Hibakezelés és visszatérési érték
- Az
fprintfvisszatérési értéke a sikeresen kiírt karakterek száma. - Ha hiba történik (pl. nem sikerül írni a fájlba), akkor negatív értékkel tér vissza.
- Célszerű a visszatérési értéket ellenőrizni kritikus írási műveleteknél.
Példa:
int ret = fprintf(fajl, "Szam: %d\n", szam);
if (ret < 0) {
fprintf(stderr, "Hiba a fajlba iro muvelet soran.\n");
}
Haladó formázási lehetőségek
Az fprintf támogatja a formátumspecifikátorok részletes beállítását:
- Szélesség: Meghatározhatjuk a minimum karakterek számát, pl.
%10d(legalább 10 karakter széles, balról kitöltve szóközzel). - Pontosság (precízió): Lebegőpontos számok esetén a tizedesjegyek száma, pl.
%.2f. - Kitöltő karakter: Alapértelmezett szóköz helyett nullával is kitölthetünk, pl.
%05d. - Igazítás: Balra igazítás
%-10s. - Típus hosszabbítások: Például
%ldhosszú egész,%lluhosszú előjel nélküli egész.
Példa:
fprintf(fajl, "Szam: %05d\n", 42);
Kimenet:
Szam: 00042
Mikor használjunk fprintf-et?
- Ha fájlba akarunk írni formázott adatokat.
- Ha naplózást, logolást végzünk.
- Ha több kimenetünk van (pl. fájl és képernyő), és szelektíven akarjuk irányítani az adatot.
- Ha hibák kimenetét akarjuk a
stderr-re irányítani:
fprintf(stderr, "Hiba: %s\n", hibaUzenet);
Összefoglaló
Az fprintf a C programozásban az egyik legfontosabb és leghasznosabb függvény a fájlba történő formázott szövegíráshoz. A:
- fájlmutató (
FILE*) segítségével tetszőleges fájlra írhatunk, - formátumsztringekkel precízen szabályozhatjuk a kiírandó szöveget,
- hibakezelése egyszerű a visszatérési érték ellenőrzésével,
- és komplex programokban fontos szerepe van a naplózásban, fájlírásban.