witam, a więc napisałem program który ma zapisywać rekordy do pliku dotyczące filmów (tyt, rez, gat itp.) ma je również odczytywać, ale nie działa jak powinien, tzn niby zapisuje te informacje do pliku, ale gdy chce wyświetlić właśnie zapisany rekord wyświetla cały czas ten sam(drugi), a gdy cchce wyświetlić wszystki rekordy, wyłancza się, prosze o pomoc, z góry dzięki oto kod:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
struct MOVIE
{
char tytul[15];
char rezyser[15];
int rok_prod;
char gatunek[10];
}film;
void drukujRekord(const struct MOVIE *t)
{
printf("%s, %s.\n",t->tytul,t->rezyser);
printf("%d, %s.\n",t->rok_prod,t->gatunek);
}
MOVIE wczytajRekord(void)
{
struct MOVIE t;
printf("podaj tytul: "); scanf("%s",&t.tytul);
printf("podaj ryzysera: "); scanf("%s",&t.rezyser);
printf("podaj rok produkcji: "); scanf("%d", &t.rok_prod);
printf(" podaj gatunek: "); scanf("%s", &t.gatunek);
return(t);
}
int main()
{
FILE *fp;
int menu;
do
{
system("cls");
printf("\n1. Dodawanie rekordu\n");
printf("2. Wyswietlanie rekordów\n");
printf("3. Wyswietlanie wszystkich rekordow\n");
printf("4. Koniec\n");
scanf("%d",&menu);
switch(menu)
{
case 1:
if ((fp=fopen("filmy.db","a+"))!=NULL)
{
film=wczytajRekord();
fwrite(&film,sizeof(MOVIE),1,fp);
}
else
perror("");
fclose(fp);
break;
case 2:
if ((fp=fopen("filmy.db","r")) !=NULL )
{
fseek(fp,sizeof(MOVIE)*1,0);
fread(&film,sizeof(MOVIE),1,fp);
printf("Rekord numer %d: ",ftell(fp)/sizeof(MOVIE));
drukujRekord(&film);
fclose(fp);
}
else
perror("");
getch();
break;
case 3:
if ((fp=fopen("filmy.db","r")) !=NULL )
{
while (feof(fp)!=0)
{
fread(&film,sizeof(MOVIE),1,fp);
printf("Rekord numer%d: ",ftell(fp)/sizeof(MOVIE));
drukujRekord(&film);
}
fclose(fp);
}
else
perror("");
getch();
break;
case 4:
return 0;
default:
printf("nie ma takiej opcji");
getch();
return 0;
}
}while(menu!=3);
}