infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Tirca Bogdan din Februarie 07, 2010, 12:49:27



Titlul: fread()
Scris de: Tirca Bogdan din Februarie 07, 2010, 12:49:27
Daca citesc dintr-un fisier numerele urmatoare:
Cod:
2
4
32 81 100 18
(fara newline in fisier) folosind fread(a,1,DIM,stdin), vectorul a va arata asa:
Cod:
+		a	0x0041a4f0 "2
4
32 81 100 1818" char [8192]
(am dat copy paste din watch-ul din vc++)
Problema e ca-mi baga inca un 18 la sfarsitul vectorului daca nu am endline la sfarsitul fisierului.De ce oare?(si in mingw face la fel)


Titlul: Răspuns: fread()
Scris de: alexandru din Februarie 07, 2010, 13:42:16
Daca valoarea lui DIM est corecta n-ar trebui. Poti posta bucata de cod :)


Titlul: Răspuns: fread()
Scris de: Tirca Bogdan din Februarie 07, 2010, 13:49:22
Cod:
....
const int DIM=8192;
char a[DIM];
int poz=DIM-1;
...
inline void read(int &x)
{
x=0;
while(a[poz]<'0'||'9'<a[poz])
if(++poz==DIM)
fread(a,1,DIM,stdin),poz=0;
while('0'<=a[poz]&&a[poz]<='9')
{
x=x*10+a[poz]-'0';
if(++poz==DIM)
fread(a,1,DIM,stdin),poz=0;
}
}


Titlul: Răspuns: Răspuns: fread()
Scris de: alexandru din Februarie 07, 2010, 13:59:25
Interesant, la mine merge perfect ( compilat sub ubuntu ).
Oricum daca dai entrer dupa ultima linie din fisier ar veni linia vida.  Pe scurt in reprezentarea memoriei ar veni ceva de genu
Cod:
....\n\0
La siruri de caractere \0 reprezinta sfarsitul sirului si astfel indiferent ca ti-l dubleaza e inutil :)


Titlul: Răspuns: fread()
Scris de: Tirca Bogdan din Februarie 07, 2010, 14:10:45
Am scapat de problema, citind primele 2 numere normal si facand parsare doar pentru a 3-a linie.Poate ca in windows se comporta diferit sau calculatoru meu are ceva :))
Asta imi arata mie daca este endline la sfarsitul fisierului
Cod:
+		a	0x0041a4f0 "2
4
32 81 100 18
8
" char [4096]


Titlul: Răspuns: fread()
Scris de: alexandru din Februarie 07, 2010, 14:12:36
Am scapat de problema, citind primele 2 numere normal si facand parsare doar pentru a 3-a linie.Poate ca in windows se comporta diferit sau calculatoru meu are ceva :))
Nu chiar, cred ca la mine editorul, dupa ultima linie scrisa trece automat la atla dupa salvare, deci scap de aceasta problema  :-'


Titlul: Răspuns: fread()
Scris de: Tirca Bogdan din Februarie 07, 2010, 14:15:12
Nu inteleg ce vrei sa zici ...


Titlul: Răspuns: fread()
Scris de: alexandru din Februarie 07, 2010, 21:33:36
Eu totusi nu inteleg de ce nu citesti tot fisierul si gata, n-ar fi mai simplu ?