Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Fstream - Cand si de ce folosim flush() ?  (Citit de 2228 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
nickul
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« : Martie 23, 2014, 20:34:21 »

Pe scurt:
http://www.infoarena.ro/job_detail/1150895 - Rezultate incorecte la afisare. De ce?
http://www.infoarena.ro/job_detail/1151011 - Un flush la fiecare 10000 de afisari rezolva problema. De ce?
http://www.infoarena.ro/job_detail/1151028 - Afisarea facuta din main rezolva problema. De ce?
Poveste:
M-am intalnit azi cu o problema curioasa. Apucandu-ma de lucru pentru ONI am zis sa fac si eu problemele din arhiva educationala. Am inceput cu http://www.infoarena.ro/problema/euclid2 . Scriu sursa, o verific si o trimit. 0 puncte. Nedumerit, ma uit din nou pe ea si vad ca uitasem sa pun \n intre rezultate. Rectific greseala si trimit bucuros solutia, asteptand satisfactia celor 100 de puncte.  De unde? Inca mai aveam teste la care scria incorect. Dupa vreo 30 de minute de debugging, neintelegand unde e problema, imi amintesc ceva ce am citit intr-un articol de pe infoarena "...este bine ca dupa afisarea rezultatului pentru fiecare test sa actualizati fisierul de iesire (prin comanda fflush)...". Pun in sursa comanda flush() dupa fiecare afisare si, surpriza! iese din timp la toate testele in afara de primele 3. http://www.infoarena.ro/job_detail/1150991 . Facea cumva un salt urias de la http://www.infoarena.ro/job_detail/1150895 cele 24 ms necesare fara comanda flush la peste 250 ms. Era clar ca vinovatul era flush si am pus un counter care crestea la fiecare afisare ca sa mai raresc flushurile. Prima data am dat flush la fiecare 1000 de afisari si vazand ca merge am zis sa intind coarda. Apoi am dat flush la fiecare 10000 de afisari si am constatat ca inca merge. Singura diferenta intre http://www.infoarena.ro/job_detail/1150895 si http://www.infoarena.ro/job_detail/1151011 este ca la fiecare 10000 de afisari dau un flush. Si totusi prima afiseaza rezultate incorecte. Am zis ca o fi avand ofstream-ul vreo limita ciudata. M-am uitat pe alte surse si am vazut o diferenta. Toti afisau din functia principala, nu din functia auxiliara. Am zis sa fac si eu o afisare direct din functia principala, poate o fi vreo diferenta, si ghici ce! http://www.infoarena.ro/job_detail/1151028 nu mai iese din timp. Nu am mai avut nevoie de flush. De ce?
Memorat
scipianus
Nu mai tace
*****

Karma: 129
Deconectat Deconectat

Mesaje: 345



Vezi Profilul
« Răspunde #1 : Martie 24, 2014, 13:51:50 »

Tu in primul rand nu inchizi fisierul de iesire
Memorat
deneo
Vorbaret
****

Karma: 185
Deconectat Deconectat

Mesaje: 160



Vezi Profilul
« Răspunde #2 : Martie 24, 2014, 15:21:51 »

Si cine naiba inchide fisierul de iesire? Oricum face asta sistemul de operare dupa terminarea programului.
In primul rand nu are return 0. Dar aparent nu are nici un efect.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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