Sari la conținut
LECȚIA 13.1 · INFORMATICĂ

Fișiere text în C++

Citirea și scrierea în fișiere text, citirea până la sfârșitul fișierului, tipare de BAC.

Conținut verificat

Deschiderea fișierelor

Deschiderea unui fisier
#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.

se trimit programului la citire

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):

Citirea pana la sfarsitul fisierului
#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.

se trimit programului la citire

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.

Maximul dintr-un fisier
#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;
}
se trimit programului la citire

Pentru conținutul 3 17 5 9, fișierul de ieșire va conține 17.

Tipare frecvente la BAC

  1. numărare cu proprietate: contor incrementat în while;
  2. ultimele două valori citite: reții prec și curent, actualizezi în ordine;
  3. valori distincte consecutive: compari fiecare valoare cu precedenta.

Greșeli frecvente

  1. Numele fișierului din enunț trebuie respectat literal ("bac.in", nu "date.in").
  2. Nu citi cu cin când enunțul cere fișier: la BAC se depunctează.
  3. while (!fin.eof()) poate procesa ultima valoare de două ori: folosește while (fin >> x).