Deschiderea fișierelor
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream pregatire("bac.in");
pregatire << "5 8 3";
pregatire.close();
ifstream fin("bac.in");
ofstream fout("bac.out");
int x;
fin >> x;
fout << x;
fin.close();
fout.close();
ifstream citire("bac.out");
citire >> x;
cout << x;
return 0;
}Atenție: La BAC fisierul de intrare exista deja. Aici programul si-l scrie singur la inceput, ca sa poata fi rulat in browser.
ifstream = fișier de INTRARE (citire), ofstream = fișier de IEȘIRE (scriere). Se folosesc exact ca cin și cout.
Citirea unui număr necunoscut de valori
Tiparul fundamental de BAC (citește până la sfârșitul fișierului):
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream pregatire("bac.in");
pregatire << "5 8 3 12 7";
pregatire.close();
ifstream fin("bac.in");
int x, suma = 0;
while (fin >> x)
suma = suma + x;
fin.close();
cout << suma;
return 0;
}Atenție: In Pascal se foloseste seekeof, nu eof: seekeof sare peste spatiile si sfarsiturile de linie de la final, asa ca nu incearca sa citeasca un numar inexistent.
Expresia fin >> x devine falsă când nu mai există valori: bucla se oprește singură.
Exemplu complet: maximul din fișier
Fișierul bac.in conține numere naturale separate prin spații.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream pregatire("bac.in");
pregatire << "5 8 3 12 7";
pregatire.close();
ifstream fin("bac.in");
ofstream fout("bac.out");
int x, maxim = -1;
while (fin >> x)
if (x > maxim) maxim = x;
fout << maxim;
fin.close();
fout.close();
cout << maxim;
return 0;
}Pentru conținutul 3 17 5 9, fișierul de ieșire va conține 17.
Tipare frecvente la BAC
- numărare cu proprietate: contor incrementat în while;
- ultimele două valori citite: reții
precșicurent, actualizezi în ordine; - valori distincte consecutive: compari fiecare valoare cu precedenta.
Greșeli frecvente
- Numele fișierului din enunț trebuie respectat literal ("bac.in", nu "date.in").
- Nu citi cu
cincând enunțul cere fișier: la BAC se depunctează. while (!fin.eof())poate procesa ultima valoare de două ori: foloseștewhile (fin >> x).