infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Florea Daniel din Ianuarie 31, 2010, 14:10:49



Titlul: problema seekg
Scris de: Florea Daniel din Ianuarie 31, 2010, 14:10:49
incerc sa fac cateva exercitii cu fisiere si am facut programul asta care vrea sa afiseze de 2 ori un fisier, dar nu inteleg ce gresesc ](*,)

ps:stiu ca sunt moduri mai usoare de a face ce vreau eu dar as vrea sa inteleg de ce nu merge asta
ps2:folosesc MinGW

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

int main () {
char a[1000];
ifstream fin ("date.in", ios::ate);

fin.seekg(0, ios::beg);

while (fin>>a)
cout<<fin.tellg()<<' '<<a<<endl;
//pana aici e ok

cout<<"\nfin: "<<fin.tellg(); //arata -1
fin.seekg(0, ios::beg);
cout<<"\nfin: "<<fin.tellg(); //tot -1

cout<<endl<<endl;

while (fin>>a) //partea asta n-o executa deloc
cout<<fin.tellg()<<' '<<a<<endl;

fin.close();
return 0;
}


Titlul: Răspuns: problema seekg
Scris de: alexandru din Ianuarie 31, 2010, 15:50:41
http://www.cplusplus.com/reference/iostream/istream/seekg/ :)


Titlul: Răspuns: problema seekg
Scris de: Florea Daniel din Ianuarie 31, 2010, 16:28:31
am citit articolul de pe cplusplus
ei au linia: is.seekg (0, ios::beg);
iar eu: fin.seekg (0, ios::beg);


problema e ca la mine nu-mi reia fisieru de la inceput dupa ce il parcurg odata
am simplificat programu cat am putut
am asa acum:
1. declar fisieru
2. il parcurg, citind din el cat se poate (adica pana la sfarsit), cu un while
3. am instructiunea fin.seekg (0, ios::beg);  care ar trebui sa duca pointeru de citire la inceputul fisierului
4. citesc din nou din fisier si afisez dar imi afiseaza doar ultimul cuvant din fisier, desi ar trebui sa o ia de la inceput (deci sa afiseze primul cuvant)
5. inchid fisieru

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

int main () {
char a[1000];
ifstream fin ("date.in");

while (fin>>a)
cout<<"bucla while: "<<a<<endl;

fin.seekg (0, ios::beg);
cout<<endl<<endl;

fin>>a;
cout<<a<<endl;

fin.close();
return 0;
}


Titlul: Răspuns: problema seekg
Scris de: alexandru din Ianuarie 31, 2010, 17:20:46
Cod:
#include <iostream>
#include <fstream>
using namespace std;

int main () {
char a[1000];
ifstream fin ("date.in");

while (fin>>a)
cout<<"bucla while: "<<a<<endl;

cout<<endl<<endl;
fin.close();
        fin.open("date.in");
        while( fin>>a )
   cout<<a<<endl;

fin.close();
return 0;
}


Titlul: Răspuns: problema seekg
Scris de: Florea Daniel din Ianuarie 31, 2010, 17:38:14
o sa razi dar tot la fel imi face ;)) (vezi ca in codu tau ai pus la a 2-a deschidere alt nume de fisier (data.in in loc de date.in) )

vad ca obtin ce trebuie daca aloc alta variabila fisierului (gen fin2); dar nu inteleg de ce nu merge seekg-ul, din cate inteleg eu asta ar trebui sa fie rostul lui


Titlul: Răspuns: problema seekg
Scris de: alexandru din Ianuarie 31, 2010, 17:39:19
La mine merg ;)
Dar asta ar trebui sigur
Cod:
#include <iostream>
#include <fstream>
using namespace std;

int main () {
  int a;

  ifstream fin;
  fin.open( "date.in" );
  cout<<"First Cycle: ";
  while( fin >> a )
          cout<<a<<' ';
  fin.clear();
  fin.seekg( 0, ios::beg );
  cout<<"\nSecond Cycle: ";
  while( fin>>a )
        cout<<a<<' ';
  return 0;
}


Titlul: Răspuns: problema seekg
Scris de: Florea Daniel din Ianuarie 31, 2010, 17:45:35
dap, asta imi merge  =D&gt;

mersi mult  :D