[ --ja-- @ 25.04.2006. 20:40 ] @
Imam kod koji tekstualnu datoteku treba prepisati u direktnu. Na prvi pogled sve radi ok, no dešava se da su zapisi do 136 ispravni, dok je 137 "pomaknut" za 1 byte... Kasnije je ova pojava, čini mi se, sve učestalija... Code: #include<stdio.h> typedef struct{ int broj; char ime[25]; char prezime[50]; double rodjenje; char JMBG[13+1]; } igrac; int main1() { igrac nogometas; FILE *dat; int rbroj; dat = fopen("700.dat", "r"); if (dat == NULL) return 0; scanf("%d", &rbroj); fseek(dat, --rbroj * sizeof(nogometas), SEEK_SET); if (fread(&nogometas, sizeof(nogometas), 1, dat)) { if (!nogometas.broj) { printf("Zapis je prazan\n"); } else { printf("Traženi zapis je: %d\nPronadjen je zapis:\n\n", ++rbroj); printf("%4d. %15s %15s %.lf %13s \n", nogometas.broj, nogometas.ime, nogometas.prezime, nogometas.rodjenje, nogometas.JMBG); } } system("PAUSE"); return 0; } int main() { double broj; igrac nogometas; FILE *baza, *novi, *nf; int a=1; nf = fopen("nf.txt", "w"); baza = fopen("baza.csv", "r"); novi = fopen("700.dat", "w"); fseek(novi, 0L, SEEK_SET); if (baza == NULL) return 0; while (1) { if (a == 0) break; a = 0; if (fscanf(baza, "%s %s %lf %lf", nogometas.ime, nogometas.prezime, &nogometas.rodjenje, &broj) != EOF) { if (broj) nogometas.broj = (int)(broj - 7000000); else nogometas.broj = 0; a++; if (broj) { strcpy(nogometas.JMBG, "1234567890123"); } else { strcpy(nogometas.JMBG, "0000000000000"); } fwrite(&nogometas, sizeof(nogometas), 1, novi); fprintf(nf,"%4d. %15s %15s %5.lf %13s\n", nogometas.broj, nogometas.ime, nogometas.prezime, nogometas.rodjenje, nogometas.JMBG); } } close(novi); close(baza); close(nf); system("PAUSE"); return 0; } Ulazna datoteka je u privitku. Donja funkcija generira datoteku 700.dat, te datoteku nf.txt (ovo mi je služilo za provjeru da vidim je li nastala pogreška kod čitanja). Gornja funkcija čita datoteku 700.dat. Po pokretanju, zahtjeva unos broja, te čita unešeni zapis... Zapis je prazan ako je broj = 0. Ja sam stvarno izgubio živce tražeći grešku, pa molim vas iskusnije da pogurate malo. Hvala! [Ovu poruku je menjao --ja-- dana 25.04.2006. u 22:15 GMT+1] |