Teoriechevron_rightGeneralități despre Fișiere (<fstream>)

Teorie: Generalități despre Fișiere (<fstream>)

Citirea și scrierea datelor folosind fișiere text (ifstream, ofstream). Citirea până la EOF.

Nivel: Începătorschedule 30 min

snippet_folderLucrul cu Fișiere Text în C++

Până acum am citit date de la tastatură (cu cin) și am afișat rezultate pe ecran (cu cout). Însă, la Bacalaureat (și în practică), datele sunt adesea prea multe pentru a fi introduse manual de fiecare dată.

Aici intervine lucrul cu fișiere text. Pentru a putea citi și scrie în fișiere, trebuie să includem biblioteca <fstream> (File Stream). Aceasta ne oferă două tipuri de date esențiale: ifstream (pentru citire/input) și ofstream (pentru scriere/output).

sync_alt1. Concepte de bază: Citire și Scriere

loginifstream (Input File Stream)

Se folosește pentru a citi date dintr-un fișier. Odată deschis fișierul, îl putem folosi exact așa cum foloseam cin.

// Declarăm o variabilă 'fin' și deschidem fișierul
ifstream fin("date.in");

int x;
fin >> x; // Citim x din fișier

logoutofstream (Output File Stream)

Se folosește pentru a scrie date într-un fișier. Odată deschis, îl putem folosi exact așa cum foloseam cout.

// Declarăm variabila 'fout' și deschidem/creăm fișierul
ofstream fout("date.out");

int x = 10;
fout << x; // Scriem x în fișier

code2. Exemple practice

Exemplul 1: Citirea unui vector dintr-un fișier și afișarea sumei în alt fișier

Fișierul bac.in conține pe prima linie un număr n, iar pe a doua linie n numere. Trebuie să scriem suma lor în bac.out.

#include <iostream>
#include <fstream> // Nu uita biblioteca!
using namespace std;

ifstream fin("bac.in");
ofstream fout("bac.out");

int main() {
  int n, v[100], suma = 0;
  // Folosim 'fin' în loc de 'cin'
  fin >> n;
  for(int i=0; i<n; i++) {
    fin >> v[i];
    suma = suma + v[i];
  }

  // Folosim 'fout' în loc de 'cout'
  fout << suma;

  return 0;
}

Exemplul 2: Citirea "până la sfârșitul fișierului" (EOF)

Deseori la Subiectul III (problema de eficiență), ți se dau numere într-un fișier, dar NU știi câte numere sunt (lipsește acel n de la început). În acest caz, trebuie să citești cât timp există date în fișier folosind construcția while(fin >> x).

#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("numere.in");

int main() {
  int x;
  // Expresia 'fin >> x' returnează 'true' cât timp reușește să citească ceva
  while (fin >> x) {
    cout << "Am citit numărul: " << x << endl;
  }

  return 0;
}

warningCapcane frecvente la Bacalaureat

  • Fișierul .out se creează automat: Dacă fișierul pentru scriere (ex: bac.out) nu există pe hard disk, programul tău îl va crea automat. Totuși, fișierul pentru citire (bac.in) trebuie să existe deja, altfel programul nu va citi nimic!
  • Declararea globală a variabilelor de fișier: Este o practică excelentă (mai ales la examen) să declari ifstream fin("nume.in"); global, în afara funcției main. Astfel, vor putea fi folosite în orice subprogram.
  • Nu uita biblioteca: Erorile de compilare de genul "ifstream was not declared in this scope" înseamnă 100% că ai uitat să scrii #include <fstream> la începutul codului.
syncSe încarcă statusul...