On Sun, 3 Mar 2019 at 13:05, Andra Danciu via so <[email protected]> wrote: > > Hello! > > La cursul 2, la unul dintre demo-uri, Razvan Deaconescu a dat close pe stdin, > a deschis un fisier si a citit un string cu scanf, presupunand ca scanf-ul va > citi din fisier. La curs acest demo nu a mers, nu imi explic de ce. La mine a > functionat. Am dat insa de un comportament ciudat. > > Acestui cod i-am dat ca argumente 3 fisiere random cu text in ele: > https://pastebin.com/xhy4gt6d > > La stdout se afiseaza primele 3 cuvinte din primul fisier, in loc sa afiseze > primul cuvant din fiecare fisier. Fisierele sunt, cumva, serializate desi le > inchid inainte sa citesc tot continutul (nu imi va citi nimic din fisierul 2 > pana nu ajunge la finalul primului fisier). Care e explicatia?
Salut, Explicația este că funcțiile din stdio fac buffering. Primul scanf citește cu read într-un buffer mai mare, iar următoarele vor întoarce date direct din buffer, fără să mai citească din fișier. scanf n-are de unde să știe că între timp ai închis și redeschis file descriptorul asociat lui stdin. _______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
