Baza danych-Rekord double.

0

Witam, jako , że jestem tu nowy, więc po pierwsze chciałbym się przywitać.
Mam do napisania program, prosta baza danych z kilkoma rekordami.
Udało mi się go stworzyć i problem jest jedynie w rekordzie typu double, gdy próbuję go wstawić do bazy pojawiają się problemy, jeśli go usunę z programu wszystko działa poprawnie.
Nie mogę go zapisać do pliku.
Układ pliku do którego zapisuję dane jest następujący:
1 linijka - liczba rekordów
kolejne linijki- dane rekordów
ostatnia linijka - zakończenie 0 .

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

#define BUFOR 100

struct Dane
{
        char opis[20];
        char krpoch[20];
        char rodzaj[20];
        double cena;
        int  rokwyd;
}
baza[30];
           
FILE *plik;

int i,n,rozmiar=0;
 
char nazwa[20];

void WyborBazy()
{      
     int wybor=0;
     
     do
     {
          printf("Podaj nazwe pliku do otworzenia.\n");
          scanf("%s",nazwa);
          printf("\n\nPodales nazwe pliku: %s\n",nazwa);
          printf("\nChcesz otworzyc ten plik?\n");
          printf("\n1-Tak\n2-Nie (wpisz jeszcze raz)\n");
          printf("\nJesli plik nie istnieje zostanie utworzony.\n");
          scanf("%d",&wybor);                     
          
     }
	 while(wybor!=1);
	 system("cls");    
}

void Wyswietl()
{    
     char *BuffFile;  
	  
     plik=fopen(nazwa,"a+");
     
     if((BuffFile=(char*)malloc(BUFOR))==NULL)                                   
     {
          printf("Nie moge przydzielic pamieci!\n");
          exit(1);
     }
     
     fscanf(plik, "%d", &rozmiar);
     
     system("cls");
     
     for (i=0; i<rozmiar; i++)                                                  //wczytujemy plik
     {                                                         
          fscanf(plik, "%s", &baza[i].opis);
          
		  fscanf(plik, "%s", &baza[i].krpoch);
          
          fscanf(plik, "%s", &baza[i].rodzaj);
          
          fscanf(plik, "%lf", &baza[i].cena);
          
          fscanf(plik, "%d", &baza[i].rokwyd);
     }
     
    fclose(plik);                                                            //zamykamy plik
        
     for( i=0; i<rozmiar; i++)
     {
          printf("Znaczek %2d:\n\tOpis: %s\n\tKraj pochodzenia: %s \n\tRodzaj: %s \n\tCena : %lf \n\tRok wydania: %d\n",i+1,baza[i].opis, baza[i].krpoch, baza[i].rodzaj, baza[i].cena, baza[i].rokwyd);
     }
        
}        


void Dodaj()
{
     int r;
     
     printf("Ile rekordow chcesz dodac?\n");
     
     scanf("%d",&r);
     
     for(i=0;i<r;i++)
     {
          printf("\nPodaj opis znaczka pocztowego:");
          
          scanf("%s", &baza[rozmiar].opis);
          
          printf("\nPodaj kraj pochodzenia znaczka:");
          
          scanf("%s", &baza[rozmiar].krpoch);
          
          printf("\nPodaj rodzaj znaczka(Zwykly/Kolekcjonerski):");
          
          scanf("%s", &baza[rozmiar].rodzaj);
          
          printf("\nPodaj cene znaczka:");
          
          scanf("%lf", &baza[rozmiar].cena);
          
          printf("\nPodaj rok wydania znaczka:");
          
          scanf("%d", &baza[rozmiar].rokwyd);
          
          
          
          rozmiar=rozmiar+1;
     }

     plik =fopen(nazwa,"w");                                                    //otwieramy plik
     
     fprintf(plik, "%d\n", rozmiar);                                            //zapisujemy wielkość pliku
     
     for(i=0; i<=rozmiar; i++)
     {
          fprintf(plik, "%s %s %s %d\n", baza[i].opis, baza[i].krpoch, baza[i].rodzaj, baza[i].cena, baza[i].rokwyd);
     }
     
     fclose(plik);                                                              //zamykamy plik
      
}






               
int main()
{    
     WyborBazy();  
	    
     int opcja;  
     printf("\n\t\t\t\t.Menu uzytkownika.\n\n\n");
     while(opcja!=0)
     {
         printf("\nWybierz dzialanie:\n");
         
         printf("1. Wyswietl baze\n");
         
         printf("2. Dodaj rekordy do bazy\n");
         
         printf("0. Wyjscie\n");
         
         scanf("%d",&opcja) ;
         
         switch(opcja)
         {
             case 1:Wyswietl(); break;
             
             case 2:Dodaj(); break;
             
             case 0:printf("\nDo zobaczenia.\n"); break;
             
             default:printf("\nWybrales nieistniejace dzialanie.\n"); break;
         }
      }
         
}          
    
            

Pozdrawiam~~

1
fprintf(plik, "%s %s %s %d\n", baza[i].opis, baza[i].krpoch, baza[i].rodzaj, baza[i].cena, baza[i].rokwyd);

porównaj ilość pół z ilością procentów w formacie.

0
 for(i=0; i<=rozmiar; i++)
     {
          fprintf(plik, "%s %s %s %lf %d\n", baza[i].opis, baza[i].krpoch, baza[i].rodzaj, baza[i].cena, baza[i].rokwyd);
     } 

Mój błąd, zapomniałem dodać to do tej wersji wklejonej na forum, ale to tak na prawdę nic nie zmienia.

0

To nie ma nic wspólnego z double, zwyczajnie nie potrafisz for'a napisać:

for(i=0;i<rozmiar;++i)
0

Potrafię , czasem jednak można trafić na różnorakie sytuacje.

Ta zmiana:
for(i=0;i<rozmiar;++i)
nic nie wnosi.

Tablica przecież jest indeksowana od zera i od zera wpisuję.
Inkrementacja .przed. chyba w niczym nie pomoże.
Popraw mnie jeśli się mylę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1