[C] struktura (prawie gotowa) potrzebana pomoc

0

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);
}
0

okkej.. chyba nie zrozumiales.. mialem na mysli FORMATOWANIE. szkoda mi tego drugi raz kasowac, wiec tym razem poprawie to za Ciebie..

0

dziękuje, a może coś z kwesti merytorycznej problemu? :)

0

1' case 2 wyswietla caly czas rekord numer 2, poniewaz masz w nim:

    fseek(fp,sizeof(MOVIE)*1,0);
    fread(&film,sizeof(MOVIE),1,fp);

2' szczerze mowiac w tej chwili nie iwem. strzelam ze po dojsciu do okolic konca pliku odczytujesz jakies smieci i program wywala sie podczas proby ich wyswietlenia. sprawdz co fread zwraca, to Ci powe czy rekord udalo sie przeczytac i czy jest co wyswietlac

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