Witam,
Mam problem z prostą bazą danych w c. Udało mi się zrobić wczytywanie bazy danych, dopisywanie do bazy danych no i wczytywanie całej bazy danych. Chciłbym jednak wyświetlać rekord po rekordzie a coś mi niestety z tym nie idzie- pewnie cos źle mam z wskażnikami do pliku - ale dla mnie to prawie jak czarna magia... Jeśli byłby ktoś tak miły i pomógł mi z tym wyświetlaniem rekord po rekordzie byłbym wdzięczny. Zastanawiam sie również jak edytować daną baze danych - tzn jak zamienić jeden element tablicy w pliku na inny element czyli w moim przypadku zamiast np. Wpisanej marki BMW wpisać Mercedes.Jeśli byłby ktoś tak miły i pomógł mi z wyżej wymienionymi problemami byłbym wdzięczny.

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

struct samochody
{
       int ID;
       char marka[20];
       char model[20];
       int rok_produkcji;
       double cena;
};
struct samochody auta[20],bufs;      
int wczytywanie();
int drukowanie();
int dopisywanie();
int h;
FILE *fp; 

int main()
{
    char n;
    
printf("Witaj przybyszu!");
printf("\nW dzisiejszym programie masz do wyboru nastepujace mozliwosci");
printf("\n1-tworzenie nowej bazy danych\n2-drukowanie istniejacej bazy danych\n3-dodawanie do istniejacej bazy danych");
do{
printf("\nTwoj wybor to?");
               n=getch();
               fflush(stdin);

switch(n)
         {
         case '1' : wczytywanie();
         break;
         case '2' : drukowanie();
         break;
         case '3' : dopisywanie();
         break;
         case '9' : exit(1);
         break;
         case 27 : exit(1);
         break;
         default : printf("\n nie ma takiej opcji, wybierz jeszcze raz");
         break;
         }         
         }while(n!='1'&&n!='2'&&n!='3'&&n!=9&&n!=27);

    
}

int wczytywanie()
{
    fp=fopen("baza aut.txt","w+");
    int i=0,rozmiar;
    char t,n;
  do
   { 
  printf("podaj marke samochodu:");
  scanf("%s",&auta[i].marka);  
  printf("\npodaj model samochodu:");
  scanf("%s",&auta[i].model);  
  printf("\npodaj rok produkcji samochodu:");
  scanf("%d",&auta[i].rok_produkcji);  
  printf("\npodaj cene samochodu:");
  scanf("%lf",&auta[i].cena); 
  auta[i].ID=i+1;
  fwrite(&auta[i],sizeof(auta),1,fp);
  i++;
  rozmiar=i;
  printf("\nCzy chcesz wpisac do bazy jeszcze jeden rekord? (t=tak)\n");
  t=getch();  
  }while (t=='t');
  
fclose(fp);
printf("\nAby przejsc do menu wcisnij 1, aby wyjsc wcisnij dowolny klawisz\n");
  
               n=getch();
               fflush(stdin);

switch(n)
         {
         case '1' : main();
         break;
         case 27 : exit(1);
         break;
         default : exit(1);
         break;
         }         

}
int drukowanie()
{
    fp=fopen("baza aut.txt","r+");
    int y,j,n,i,d,g,rozmiar;
    char z;
    fseek(fp,0,SEEK_END); 
    rozmiar=ftell(fp)/sizeof(auta);
    fseek(fp,0,0);
    d=0;
    g=1;
    for(h=0;h<rozmiar;h++)
    {
                          system("cls");
                        fread(&auta,sizeof(auta),1,fp); 
                        for(j=d;j<g;j++)
                        {
                        printf("opis %d auta:",j+1); 
    for (n=0;n<1;n++)
  {
  printf("\nnumer ID samochodu:%d",auta[n].ID);
  printf("\nmarka samochodu:%s",auta[n].marka);
  printf("\nmodel samochodu:%s",auta[n].model);
  printf("\nrok produkcji samochodu:%d",auta[n].rok_produkcji);
  printf("\ncena samochodu:%lf",auta[n].cena);
  }
  }
  printf("\n1-edytuj 2-usun 3-Home 4-End 5-Page Up 6-Page Down");
 do{
                     
  z=getch();
     y=z;                                  
    switch(y)
    {
         case '1' : edytuj();
         break;
         /*case '2' : usun();
         break;*/
         case '3' :
         fseek(fp,0,0);
         d=0;
         g=1;
         break;
         case '4' :
         fseek(fp,-1*sizeof(auta),2);
         d=rozmiar-1;
         g=rozmiar;
         break;
         case '5' : 
         fseek(fp,(h+1)*sizeof(auta),0);
         if(g>rozmiar-2&&g<rozmiar)
         {
         d=rozmiar-1;
         g=rozmiar;
         }
         else
         {
         d++;
         g++;
         }
         break;
         case '6' : 
         fseek(fp,-(h+1)*sizeof(auta),2);
         if(d<1)
         {
         d=0;
         g=1;
         }
         else
         {
         d--;
         g--;
         }
         break;
         case 27 : exit(1);
         break;
         default : printf("\nnie ma takiej opcji, wybierz jeszcze raz");
         break;
         }  
         }while(y!=27&&y!=1&&y!=2&&y!=3&&y!=4&&y!=5&&y!=6);        
}
  fclose(fp);
}

int dopisywanie()
{
    fp=fopen("baza aut.txt","a+");
      int i;
    char t,n;
    fseek(fp,0,SEEK_END);
    i=ftell(fp)/sizeof(auta);
    fseek(fp,0,SEEK_END);
    do
   { 
  printf("podaj marke samochodu:");
  scanf("%s",&auta[i].marka);  
  printf("\npodaj model samochodu:");
  scanf("%s",&auta[i].model);  
  printf("\npodaj rok produkcji samochodu:");
  scanf("%d",&auta[i].rok_produkcji);  
  printf("\npodaj cene samochodu:");
  scanf("%lf",&auta[i].cena); 
  auta[i].ID=i+1;
  fwrite(&auta[i],sizeof(auta),1,fp);
  i++;
  printf("\nCzy chcesz wpisac do bazy jeszcze jeden rekord? (t=tak)\n");
  t=getch();  
  }while (t=='t');
  fclose(fp);
  printf("\nAby przejsc do menu wcisnij 1, aby wyjsc wcisnij dowolny klawisz\n");
  

               n=getch();
               fflush(stdin);

switch(n)
         {
         case '1' : main();
         break;
         case 27 : exit(1);
         break;
         default : exit(1);
         break;
         }       
         }  
         

int edytuj(int h)
{
    char a;
    int b;
    fp=fopen("baza aut.txt","r+");
    do{
    printf("\n1-edytuj marke auta 2-edytuj model auta 3-edytuj rok produkcji auta 4-edytuj cene auta");
    a=getch();
    b=a;
 switch(b)
 {
 case '1' :
 printf("\npodaj nowa marke:");
 scanf("%s",&auta[h].marka);
 fwrite(&auta[h],(h+1)*sizeof(auta),1,fp);
 break;
 case '2' :
 printf("\npodaj nowy model:");
 scanf("%s",&auta[h].model);
 fwrite(&auta[h],(h+1)*sizeof(auta),1,fp);
 break;
 case '3' :
 printf("\npodaj nowy rok produkcji:");
 scanf("%s",&auta[h].rok_produkcji);
 fwrite(&auta[h],(h+1)*sizeof(auta),1,fp);
 break;
 case '4' :
 printf("\npodaj nowa cene:");
 scanf("%s",&auta[h].cena);
 fwrite(&auta[h],(h+1)*sizeof(auta),1,fp);
 break;
 case 27 : exit(1);
 break;
 default : printf("\nnie ma takiej opcji");
 break;
}
}while(b!=1&&b!=2&&b!=3&&b!=4&&b!=27);
 drukowanie();
}