Ce face fprintf
fprintf este printf cu un parametru în plus: fișierul în care scrie. printf(...) este de fapt fprintf(stdout, ...). Specificatorii (%d, %s, %.2f) sunt aceiași.
Fiecare program are trei fluxuri deschise automat: stdin (intrarea), stdout (ieșirea normală) și stderr (mesajele de eroare). Mesajele de eroare se scriu cu fprintf(stderr, ...), ca să nu se amestece cu datele, de exemplu când ieșirea programului este redirecționată într-un fișier cu >.
Parametri
| Parametru | Descriere |
|---|---|
stream |
Unde se scrie: un fișier deschis cu fopen, stdout sau stderr. |
format, ... |
Șablonul și valorile, ca la printf. |
Ce returnează
Numărul de caractere scrise sau o valoare negativă la eroare.
Exemple
Exemplul 1: Un fișier CSV cu vânzări
Programul scrie un antet și câte un rând pentru fiecare oraș, apoi citește fișierul înapoi ca să vedem ce conține.
#include <stdio.h>
int main(void) {
const char *orase[] = {"Iași", "Cluj", "Brașov"};
double vanzari[] = {1520.5, 980.0, 1210.75};
FILE *f = fopen("vanzari.csv", "w");
if (f == NULL) {
perror("vanzari.csv");
return 0;
}
fprintf(f, "oras,vanzari\n");
for (int i = 0; i < 3; i++) {
fprintf(f, "%s,%.2f\n", orase[i], vanzari[i]);
}
fclose(f);
f = fopen("vanzari.csv", "r");
if (f == NULL) return 0;
char rand[64];
while (fgets(rand, sizeof rand, f) != NULL) {
fputs(rand, stdout);
}
fclose(f);
return 0;
}
Rezultat
oras,vanzari
Iași,1520.50
Cluj,980.00
Brașov,1210.75
Exemplul 2: Mesaje de eroare pe stderr
Datele merg pe stdout, avertismentul pe stderr. În terminal apar amândouă; dacă rulezi ./program > rezultat.txt, în fișier ajung doar datele. Aici, ieșirea de eroare a fost afișată după cea normală.
#include <stdio.h>
int main(void) {
int note[] = {9, 11, 8};
for (int i = 0; i < 3; i++) {
if (note[i] < 1 || note[i] > 10) {
fprintf(stderr, "Atenție: nota %d de pe poziția %d nu este validă\n", note[i], i);
continue;
}
fprintf(stdout, "Nota %d: %d\n", i, note[i]);
}
return 0;
}
Rezultat
Nota 0: 9
Nota 2: 8
Atenție: nota 11 de pe poziția 1 nu este validă
Greșeli frecvente
- Inversezi ordinea argumentelor:
fprintf("%d", f, x). Fișierul este primul argument. - Scrii erorile cu
printf. Când ieșirea este redirecționată sau trimisă altui program, mesajele de eroare ajung amestecate cu datele. - Folosești
fprintfpe un fișier deschis cu"r". Scrierea eșuează; deschide cu"w","a"sau un mod cu+.
Comenzi înrudite
printf: Afișează text formatat pe ecran: un șablon cu specificatori (%d, %s, %.2f) completați cu valorile primite după el.fopen și fclose: Deschide un fișier pentru citire, scriere sau adăugare și returnează un FILE *; fclose îl închide și salvează datele rămase.fscanf: Citește valori dintr-un fișier după un șablon, ca scanf; returnează câte câmpuri a citit sau EOF la final.errno, perror și strerror: errno păstrează codul ultimei erori a unei funcții de bibliotecă; perror și strerror îl transformă într-un mesaj citibil.Specificatori de format (%d, %f, %s): Ce înseamnă %d, %u, %f, %e, %s, %c, %x, %zu și cum controlezi lățimea, zecimalele și alinierea în printf.