Ugrás a tartalomhoz

fprintf

A Wikiszótárból, a nyitott szótárból


Főnév

fprintf (tsz. fprintfs)

  1. (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 fprintf fü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 fprintf visszaté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 %ld hosszú egész, %llu hosszú 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.