struct katalog ksiazek

0

witam Wszystkich
Otóż mam problem z kodem nie wiem dlaczego na koniec nie chce mi wyswietlic wczytanych tytulow i autorow; a oto ten nieszczesny kod: gdyby ktos z Was wpadl na jakis pomysl bede bardzo wdzieczny:

#include <stdio.h>

#define MAKSTYTUL 40
#define MAKSAUTOR 40
#define MAKSKSIAZEK 4

struct katalog
{
char tytul[MAKSTYTUL];
char autor[MAKSAUTOR];
};
int main(void)
{
struct katalog spis[MAKSKSIAZEK];
int licznik = 0;
int index;
printf("Podaj tytul ksiazki:\n");
printf("Aby zakonczyc, wcisnij [enter] na poczatku wiersza.\n");
while(licznik < MAKSKSIAZEK && gets(spis[licznik].tytul) != NULL && spis[licznik].tytul[0] != '\0')
{
printf("Teraz podaj autora.\n");
gets(spis[licznik].autor);
if(licznik < MAKSKSIAZEK)
printf("Podaj kolejny tytul:\n");
}
printf("Oto lista twoich ksiazek:\n");
for(index=0; index<licznik; index++)
printf("%s, autor: %s\n",spis[index].tytul,spis[index].autor);
return 0;
}

1

Bo u ciebie licznik jest zawsze 0.

0

Nigdzie nie inkrementujesz zmiennej "licznik".

0

o_O musisz za każdym razem kiedy pobierasz nową pozycję książkową robić licznik++

0

w nawiazaniu do tego postu mam jeszcze pytanie w jaki sposób mogłbym zrobic usuwanie rekordu i ewentualne wyszukiwanie danego rekordu: oto kod:

#include <stdio.h>

#define MAKSTYTUL 40
#define MAKSAUTOR 40
#define MAKSKSIAZEK 5

struct katalog
{
char tytul[MAKSTYTUL];
char autor[MAKSAUTOR];
};

int main(void)
{
struct katalog spis[MAKSKSIAZEK];

           int licznik = 0;
           int index,licznik_pliku;

           FILE * plik_katalog;
           int rozmiar = sizeof(struct katalog);
              if((plik_katalog = fopen("katalog_ksiazek.dat", "a+b")) == NULL)
                {
                 fputs("Nie moge otworzyc pliku katalog_ksiazek.dat\n",stderr);
                 exit(1);
                }
                rewind(plik_katalog);

                while(licznik < MAKSKSIAZEK && fread(&spis[licznik], rozmiar, 1, plik_katalog) == 1)
                     {
                      if(licznik == 0)
                      puts("Biezaca zawartosc pliku katalog_ksiazek.dat:");
                      printf("%s by %s:\n",spis[licznik].tytul, spis[licznik].autor);
                      licznik++;
                     }
                     licznik_pliku = licznik;

                     if(licznik == MAKSKSIAZEK)
                       {
                       fputs("Plik katalog_ksiazek.dat jest pelny.\n",stderr);
                       exit(2);
                       }
                       puts("Podaj nowe tytuly ksiazek.");
                       puts("Aby zakonczyc, wcisnij [enter] na poczatku wiersza.");

while(licznik < MAKSKSIAZEK && gets(spis[licznik].tytul) != NULL && spis[licznik].tytul[0] != '\0')
{
puts("Teraz podaj autora.");
gets(spis[licznik].autor);

   while(getchar() != '\n')
        continue;

        if(licznik < MAKSKSIAZEK)
          puts("Podaj nastepny tytul.");
          licznik++;
  }
  puts("Oto lista Twoich ksiazek:");

         for(index=0; index<licznik; index++)
            printf("%s, autor: %s\n",spis[index].tytul,spis[index].autor);

         fwrite(&spis[licznik_pliku], rozmiar, licznik - licznik_pliku, plik_katalog);
         fclose(plik_katalog);

         return 0;
0

Wyszukiwanie: czytasz rekord po rekordzie i porównujesz.
Usuwanie: Przemianowujesz plik na np .bak; Odczytujesz rekord po rekordzie z pliku .bak; i natychmiast zapisujesz do pliku .dat pomijając zapis usuwanego rekordu; Po zakończeniu ewentualnie usunąć plik .bak

0

co do tego wyszukiwania i usuwania to tak sie zastanawiam czy te operacje moge gdzies załączyc w tym kodzie czy ponownie musze plik otwierac i wtedy umiescic dana procedure

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