infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Slevoaca Stefan-Gabriel din Noiembrie 08, 2015, 23:25:18



Titlul: Citire din fisier
Scris de: Slevoaca Stefan-Gabriel din Noiembrie 08, 2015, 23:25:18
Salut ! Ce variante de a citi pana la finalul unui fisier folositi ? while(!f.eof()) imi cauzeaza probleme.. citeste mereu inca o data ultima valoare din fisier (folosesc CodeBlocks)


Titlul: Răspuns: Citire din fisier
Scris de: FMI Razvan Birisan din Noiembrie 09, 2015, 19:43:46
Trebuie să faci o citire înainte de while și nu o să mai pățești asta.

Fișierul date.txt:
Cod:
10 9 8 7 6 5 4 3 2 1

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

int main()
{
    ifstream fin("date.txt");

    int x;
    while( !fin.eof() )
    {
        fin >> x;
        cout << x << ' ';
    }

    fin.close();
    return 0;
}
Programul afișează 10 9 8 7 6 5 4 3 2 1 1

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

int main()
{
    ifstream fin("date.txt");

    int x;
    fin >> x;
    while( !fin.eof() )
    {
        cout << x << ' ';
        fin >> x;
    }

    fin.close();
    return 0;
}
Programul afișează 10 9 8 7 6 5 4 3 2 1

Sper că ți-am fost de ajutor. :)

PS: Poți să scrii programul și așa, dacă vrei:
Cod:
# include <fstream>
# include <iostream>
using namespace std;

int main()
{
    ifstream fin("date.txt");

    int x;
    while( fin >> x )
        cout << x << ' ';

    fin.close();
    return 0;
}


Titlul: Răspuns: Citire din fisier
Scris de: Slevoaca Stefan-Gabriel din Noiembrie 12, 2015, 18:47:32
Mersi mult de raspuns ! :) Vreo idee de ce se intampla chestia aia cu while(!f.eof()) ??


Titlul: Răspuns: Citire din fisier
Scris de: FMI Razvan Birisan din Noiembrie 12, 2015, 23:59:35
Există un indicator care arată unde s-a ajuns cu citirea fișierului.
De exemplu, să luăm aceleași date de intrare: 10 9 8 7 6 5 4 3 2 1
Când indicatorul ajunge la 1 el nu știe ca acolo se termină fișierul, mai încearcă o citire și atunci descoperă că a ajuns la final. Și îți afișează de două ori ultima valoare pentru că afișezi fără verifici dacă s-a ajuns la final.
Cod:
    while( !fin.eof() )
    {
        fin >> x;
        cout << x << ' ';
    }

Un alt mod de a evita asta, deși eu le prefer pe celelalte două, este:
Cod:
# include <fstream>
# include <iostream>
using namespace std;

int main()
{
    ifstream fin("date.txt");

    int x;
    while( !fin.eof() )
    {
        fin >> x;
        if( fin.eof() ) break;
        cout << x << ' ';
    }

    fin.close();
    return 0;
}



Titlul: Răspuns: Citire din fisier
Scris de: Slevoaca Stefan-Gabriel din Noiembrie 19, 2015, 18:49:38
am inteles acum. multumesc mult de ajutor ! :)