Witam, mam problem z poniższym programem. Wypisuje on mi nazwę oraz autora ksiazki, lecz za kazdym razem cenę podaje jako 0. Nie wiem gdzie jest błąd, pomożecie?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max_dl_aut 31
#define max_dl_tyt 41
typedef struct KSIAZKA{
char * autor;//[max_dl_aut];
char * tytul;//[max_dl_tyt];
float * cena;
}Ksiazka;
typedef struct LISTA lista;
struct LISTA{
Ksiazka ksiazka;
lista * nastepny;
// lista * poprzedni;
};
char * dodaj_napis();
lista* stworz_element()//char * autor,char *tytul, float * cena)
{
lista *element;
char *autor, *tytul;
float * cena;
char bufor[41];
printf("Autor ");dodaj_napis(bufor);
autor = (char*)malloc(sizeof(char)*(max_dl_aut));
strcpy(autor,bufor);
printf("Tytul ");dodaj_napis(bufor);
tytul = (char*)malloc(sizeof(char)*(max_dl_tyt));
strcpy(tytul,bufor);
printf("Cena:");scanf("%f",&cena);
cena = (float *)malloc(sizeof(float));
element = (lista*)malloc(sizeof(lista));
element->nastepny = NULL;
element->ksiazka.autor = autor;
element->ksiazka.tytul = tytul;
element->ksiazka.cena = cena;
return element;
}
lista * wypisz(lista * wskaznik)
{
lista * list = wskaznik;
while(list != NULL)
{
printf("Autor: %s\n Tytul %s\n Cena: %.2f\n", list->ksiazka.autor, list->ksiazka.tytul, list->ksiazka.cena);
list = list->nastepny;
}
}
int main(void){
int wyjscie = 1;
int wybor = 0;
lista * head = NULL;
while(wyjscie){
printf("1 - Dodaj element do listy\n");
printf("2 - Wypisz liste\n");
printf("3 - Zakoncz program\n");
printf("Wybor:");scanf("%d",&wybor);
fflush(stdin);
switch(wybor){
case 1:
head = stworz_element(head);
break;
case 2:
head=wypisz(head);
break;
case 3:
wyjscie=0;
puts("\n\nNarka!");
puts("Narka!");
puts("Narka!");
break;
}
}
free(head);
return 0;
}
char * dodaj_napis(char *z, int ile){
char * wynik;
char * tutaj;
wynik = fgets(z , ile, stdin);
if(wynik){
tutaj = strchr(z, '\n');
if(tutaj)
*tutaj = '\0';
else
while(getchar() != '\n')
continue;
}
return wynik;
}