[C] struktura (prawie gotowa) potrzebana pomoc

Odpowiedz Nowy wątek
2008-01-12 21:41

Rejestracja: 12 lat temu

Ostatnio: 12 lat temu

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

Pozostało 580 znaków

2008-01-12 21:57

Rejestracja: 13 lat temu

Ostatnio: 1 rok temu

0

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


no to pojechałem z nieobecnością.. chwila przerwy i prawie rok przeleciał

Pozostało 580 znaków

2008-01-13 09:23

Rejestracja: 12 lat temu

Ostatnio: 12 lat temu

0

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

Pozostało 580 znaków

2008-01-13 12:41

Rejestracja: 13 lat temu

Ostatnio: 1 rok temu

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


no to pojechałem z nieobecnością.. chwila przerwy i prawie rok przeleciał

Pozostało 580 znaków

Odpowiedz

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