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~~