infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Vene Tian din Martie 13, 2008, 15:14:20



Titlul: (fopen || freopen) || (ifstream && ofstream)
Scris de: Vene Tian din Martie 13, 2008, 15:14:20
Sunt un pic nedumerit... Nu ştiu ce funcţie să folosesc ... am auzit că în ultima versiune de g++ , cea mai rapida citire&scriere se face cu streamuri .... In BC 3.1 însă , cea mai rapidă astfel de funcţie este freopen (după fopen şi streamuri) ...

Ce diferenţe de utilizare sunt între fopen şi freopen ?

Spre exemplu :

fopen
Cod:
FILE * fişier;
fişier=fopen("blabla.bla", "w");
fprintf (fişier, "Test");

freopen
Cod:
freopen ("blabla.bla","w",stdout);
//şi apoi înloc de fscanf şi fprintf se folosesc printf şi scanf ... de ce ?
printf ("Test");


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Florian Marcu din Martie 13, 2008, 16:08:19
Din cate stiu eu, e doar o diferenta de sintaxa (cea cu freopen fiind mai comoda). Sa ma corecteze cineva daca gresesc.


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Filip Cristian Buruiana din Martie 13, 2008, 19:01:06
Eu folosesc freopen pentru ca e foarte comod, si toti cei pe care ii cunosc folosesc freopen. Doar o singura linie la inceput si dupa aceea citirea se face exact ca si cum ai citi de la tastatura.


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Timotei Dolean din Martie 13, 2008, 19:55:06
da... numa ca daca ai nevoie de consola in program nu ii bine sa foloses freopen pt ca itzi foloseste numa fisieru...


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: HighScore din Martie 13, 2008, 20:13:29
da... numa ca daca ai nevoie de consola in program nu ii bine sa foloses freopen pt ca itzi foloseste numa fisieru...
stderr  :P


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Alina Ene din Martie 13, 2008, 21:44:41
In general este o idee buna sa printezi debugging stuff in stderr.


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Herpesius din Martie 13, 2008, 22:10:47
Citat
Doar o singura linie la inceput si dupa aceea citirea se face exact ca si cum ai citi de la tastatura.

Mulţumesc pentru răspuns. Mi-a fost de ajutor. (ai +1 karma)



Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Pripoae Teodor Anton din Martie 13, 2008, 22:15:02
si fisierele deschise cu freopen nu mai trebuiesc inchise... e enervant sa stai sa le inchizi tot timpu si sa iei 0 puncte daca nu le inchizi (vezi fopen)


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Herpesius din Martie 13, 2008, 22:17:13
... wow ms . nu ştiu ce mă făceam dacă nu menţionai asta...

În general folosesc citirea/scrierea cu streamuri şi dacă nu închid vreun fişier nu spune nimica.... La fel şi cu freopen...


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Bondane Cosmin din Martie 13, 2008, 22:18:39
... wow ms . nu ştiu ce mă făceam dacă nu menţionai asta...

În general folosesc citirea/scrierea cu streamuri şi dacă nu închid vreun fişier nu spune nimica.... La fel şi cu freopen...

Cu freopen nu mai trebuie inchise.


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Herpesius din Martie 13, 2008, 22:31:37
probabil ai citit printre rânduri  :-s ... am spus că atât la citirea/scrierea cu streamuri cât şi la citirea/scrierea cu freopen nu trebuie să mai inchid fişierul...(cel puţin e opţional)


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Florian Marcu din Martie 14, 2008, 09:03:19
Cu freopen nu mai trebuie inchise.

Banuiesc ca nici cu fopen, nu?


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Bondane Cosmin din Martie 14, 2008, 09:27:32
Cu freopen nu mai trebuie inchise.

Banuiesc ca nici cu fopen, nu?

Cu fopen ar fi indicat sa le inchizi.

Cod:
FILE *fin = fopen("tralala.in","r");
.......
fclose(fin)


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Bunau Florin din Martie 14, 2008, 10:08:08
Trebuie inchise fisierele doar fiindca e posibil ca tu sa fi scris ceva si sa nu se salveze in output.
Nu se scrie automat in fisier cand zici fprintf(...), ci se scrie intr-un buffer. Ar fi culmea ca scrierea pe disc sa fie la fel de rapida ca cea in RAM. Si cand inchizi fisierul printre altele se da si un flush la buffer, si se scrie tot ce era de scris in fisier.

Daca vrei sa dai flush automat, foloseste fflush() http://www.thinkage.ca/english/gcos/expl/c/lib/fflush.html (http://www.thinkage.ca/english/gcos/expl/c/lib/fflush.html)



Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Alina Ene din Martie 14, 2008, 18:07:58
Credeam ca buferul e flushed automat cand programul termina normal (de obicei nu inchid fisierele).


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Valentin Stanciu din Martie 14, 2008, 19:31:07
Bufferele de IO sunt golite automat cand se termina programul. Atat freopen cat si fopen au acelasi comportament. Un "good practice" este sa iti inchizi handle-urile de fisiere (inclusiv stdout redirectionat catre fisier)


Titlul: Răspuns: (fopen || freopen) || (ifstream && ofstream)
Scris de: Pelelunga Mircea din Martie 16, 2008, 21:21:04
personal folosesc ifstream si ofstream   #-o