Witam. Otóż nie mogę dojść do tego dlaczego program nie zapisuje danych w odpowiednim miejscu. W skrócie, mam zapisanych do pliku binarnego 10 liczb typu double z tablicy wcześniej zdefiniowanej. Następnie muszę zamienić pierwszy i ostatni wyraz w pliku używając funkcji fseek oraz ftell.
Jeżeli chodzi o używanie fseek dla wczytywania argumentów to działa on jak należy. Ustawiam znacznik na początek pobieram 1 wyraz , tak samo ustawiam znacznik na przedostatni wyraz i pobieram ostatni. To działa. Następnie kiedy przechodzę znacznikiem gdziekolwiek w pliku i chcę zapisać tam pobrany wyraz fseek nie działa, cały czas zamienia tylko początkowy wyraz mimo że ustawiam znacznik na ostatni
Jeżeli ktoś ogarnia C to miałbym jeszcze parę pytań co do kilku zadań. Jeśli masz chwilę i mógłbyś/mogłabyś pomóc to proszę o wiadomość PW .
Z góry dziękuję !
#include <stdio.h>
#include <stdlib.h>
int main()
{
double wyraz1;
double wyraz2;
double tab[10]={12.0,15.0,17.0,21.0,15.5,16.25,17.11,19.22,22.22,99.97};
double tab2[10];
long odstep=sizeof(tab[0]);
printf("%d \n",odstep);
int i=0;
FILE *p;
p=fopen("DANE.BIN","w");
if(p==NULL)
printf("Pliczek sie nie otworzyl");
else
{
for(i=0;i<20;i++)
{
fwrite(tab,sizeof(tab),1,p);
}
}
fclose(p);
p=fopen("DANE.BIN","ab+");
while(!feof(p))
{
fread(tab2,sizeof(tab2),1,p);
}
fclose(p);
for(i=0;i<10;i++)
printf("%.2f ",tab2[i]);
p=fopen("DANE.BIN","a+b");
fseek(p,0,SEEK_SET);
fread(&wyraz1,sizeof(double),1,p);
printf("%.2f",wyraz1);
fseek(p,-odstep,SEEK_END);
fread(&wyraz2,sizeof(double),1,p);
printf("%.2f",wyraz2);
fseek(p,0,SEEK_SET);
fwrite(&wyraz2,sizeof(double),1,p);
fseek(p,-odstep,SEEK_END);
fwrite(&wyraz1,sizeof(double),1,p);
fclose(p);
printf("\n------------------------------------------------------\n");
p=fopen("DANE.BIN","r");
while(!feof(p))
{
fread(tab2,sizeof(tab2),1,p);
}
fclose(p);
for(i=0;i<10;i++)
printf("%.2f ",tab2[i]);
return 0;
}