Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Citire din fisier  (Citit de 8876 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Slevy
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 13



Vezi Profilul
« : 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)
Memorat
TheNechiz
De-al casei
***

Karma: 30
Deconectat Deconectat

Mesaje: 145



Vezi Profilul
« Răspunde #1 : 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. Smile

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;
}
« Ultima modificare: Noiembrie 09, 2015, 20:13:23 de către Razvan Birisan » Memorat
Slevy
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 13



Vezi Profilul
« Răspunde #2 : Noiembrie 12, 2015, 18:47:32 »

Mersi mult de raspuns ! Smile Vreo idee de ce se intampla chestia aia cu while(!f.eof()) ??
Memorat
TheNechiz
De-al casei
***

Karma: 30
Deconectat Deconectat

Mesaje: 145



Vezi Profilul
« Răspunde #3 : 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;
}

Memorat
Slevy
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 13



Vezi Profilul
« Răspunde #4 : Noiembrie 19, 2015, 18:49:38 »

am inteles acum. multumesc mult de ajutor ! Smile
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines