Skip to content

Citirea si afisarea din fisiere ​

In lectia anterioara am citit de la tastatura (cin) si am afisat pe ecran (cout). In multe probleme (pe pbinfo.ro, la concursuri) citirea si afisarea se fac din/in fisiere. In aceasta lectie invatam cum.

De ce fisiere? ​

  • Multe probleme cer sa citesti din date.in si sa scrii in date.out
  • Nu trebuie sa tastezi datele de fiecare data cand testezi
  • Poti lucra cu date de intrare mari fara sa le introduci manual

Diferente pe scurt ​

CONSOLAFișiereObservații
#include <iostream>#include <fstream>Biblioteci necesare
using namespace std;using namespace std;
ifstream fin("fisier.in");
ofstream fout("fisier.out");
Intre ghilimele pui numele fisierelor, conform enuntului problemei
cin >> x;fin >> x;În loc de cin vom scrie fin
cout << x;fout << x;În loc de cout vom scrie fout

Exemplu minimal ​

Fisierul date.in contine:

5 3

Programul citeste cele doua numere si scrie suma in date.out:

cpp
#include <fstream>
using namespace std;

// intre ghilimele vom pune numele fisierelor
ifstream fin("date.in"); // date.in e fisierul de intrare
ofstream fout("date.out"); // date.out e fisierul de iesire

int a, b;
int main()
{    
    fin >> a >> b;               // citesc din fisier (la fel ca cin >>)
    fout << a + b << endl;       // scriu in fisier (la fel ca cout <<)
    return 0;
}

Fisierul date.out va contine:

8

Pas cu pas ​

1. Includem <fstream> ​

cpp
#include <fstream>

Sfat

Nu mai avem nevoie de #include <iostream> daca nu folosim cin/cout. Dar le putem include pe amandoua daca vrem sa afisam si pe ecran si in fisier.

2. Deschidem fisierele ​

cpp
ifstream fin("date.in");     // deschide date.in pentru citire
ofstream fout("date.out");   // creeaza date.out pentru scriere

3. Citim si scriem ​

Exact ca cin >> si cout <<, dar inlocuim cu fin >> si fout <<:

cpp
fin >> a >> b;           // citesc doua valori din fisier
fout << a + b << endl;   // scriu rezultatul in fisier

Citirea mai multor valori din fisier ​

Fisierul numere.in:

10 20 30
cpp
#include <fstream>
using namespace std;
ifstream fin("numere.in");
ofstream fout("numere.out");
int a, b, c;

int main()
{
    fin >> a >> b >> c;

    fout << "Suma: " << a + b + c << endl;
    fout << "Primul numar: " << a << endl;

    return 0;
}

Fisierul numere.out:

Suma: 60
Primul numar: 10

Combinarea fisierelor cu ecranul ​

Daca vrei sa citesti din fisier si sa afisezi pe ecran, include ambele biblioteci:

cpp
#include <iostream>
#include <fstream>
using namespace std;
// folosim fin pentru a citi din fisierul de intrare
ifstream fin("date.in"); 

int a, b;

int main()
{
    fin >> a >> b;
    cout << "Suma este: " << a + b << endl;   // afisare pe ecran
    return 0;
}

Crearea fisierelor in CodeBlocks ​

Fisierul de intrare ​

Fisierul de intrare (ex: suma.in) trebuie creat de tine manual, inainte de a rula programul. Uite cum:

  1. In CodeBlocks, apasa Ctrl + Shift + N. Va aparea o fereastra cu mesajul:

Do you want to add this new file in the active project (has to be saved first) ? Apasa Yes.

  1. Va aparea urmatoarea fereastra :
+-------------------------------------------------------+
| Save file                                          [X]|
+-------------------------------------------------------+
| [ Documents > preg ]                                  |
                                                        |
| +---------------------------------------------------+ |
| | Name             | Type         | Size            | |
| |------------------+--------------+-----------------| |
| | [Folder] bin     | File Folder  |                 | |
| | [Folder] obj     | File Folder  |                 | |
| | main.cpp         | CPP File     | 1 KB            | |
| | main.exe         | Application  | 128 KB          | |
| | preg.cbp         | Project file | 4 KB            | |
| | preg.depend      | DEPEND file  | 2 KB            | |
| | preg.layout      | LAYOUT file  | 1 KB            | |
| +---------------------------------------------------+ |
|                                                       |
| File name:    [ suma.in                            ]  |
|                                                       |
| Save as type: [ All files (*.*)                    ]  |
|                                                       |
|                                  [ Save ]  [ Cancel ] |
+-------------------------------------------------------+

La File name: veti introduce numele fisierului de intrare.

Foarte important: in campul "Save as type", alegeti "All files (*.*)".

Altfel, CodeBlocks va adauga automat o extensie gresita.

Apoi in urmatoarea fereastra, apasa mereu OK:

_________________________________________________
| Multiple selection                       [ _][X]|
|-------------------------------------------------|
| Select the targets this file should belong to:  |
|  __________________________                     |
| | [x] Debug                | [Wildcard select]  |
| | [x] Release              |                    | 
| |                          | [Toggle selection] |
| |                          |                    |  
| |                          | [Select All]       |
| |                          |                    |
| |                          | [Deselect All]     |
| |                          |                    |
| |                          |  Selected: 2       |
| |__________________________|                    |
|_________________________________________________|
|                                                 |
|                          [   OK   ] [ Cancel ]  |
|_________________________________________________|
  1. Scrie datele de intrare in acest fisier (ex: 5 3).

Fisierul de iesire ​

Creeaza la fel si fisierul de iesire. Doar fii atent ca la File name sa introduci numele fisierului de iesire (ex: suma.out).

Daca ai rulat deja programul, fisierul de iesire a fost deja creat automat. Cand vei incerca sa-l creezi, vei primi un mesaj de avertizare :

suma.out already exists. Do you want to replace it ? Apasa Yes.

Panoul cu fisiere (Project Management) ​

Pentru a vedea fisierele din proiect, apasa Shift + F2 — se va deschide panoul Project Management in stanga. Acolo vei vedea toate fisierele. Apasa din nou Shift + F2 pentru a-l ascunde.

Reincarcarea fisierului de iesire ​

Dupa ce rulezi programul, CodeBlocks va va intreba:

"This file was modified outside the IDE. Do you want to reload it?"

Apasa mereu Yes. Programul tau a scris rezultatul in fisierul de iesire, iar CodeBlocks trebuie sa reincarce fisierul ca sa vezi ce contine acum.

(Daca apesi No, vei vedea in continuare continutul vechi.)