Witam. Jest to pewnie dosyć proste zagadnienie. Próbuję pisać kod w C na małą bazę danych. Program wywala się jednak po pobraniu dwóch elementów listy (w sensie dwóch elementów po dwie zmienne).
Może miałby ktoś pomysł, co należy poprawić w tym kodzie? (Program we wcześniejszej wersji, bez menu, z kilkukrotnym wywołaniem dodawania elementu w funkcji main() - wpisane było "na sztywno" kilka linijek typu dodajostatni(&pierwszy,liczba) - poprawnie dodawał do listy elementy)
Byłbym wdzięczny za pomoc z tym problemem (próbuję to poprawić już od pewnego czasu)
#include <stdlib.h>
#include <stdio.h>
typedef struct el_listy
{
//char nadawca[30];
float waga;
int status;
struct el_listy *poprz;
struct el_listy *nast;
} el;
typedef el* LISTA;
void wypisz(LISTA pierwszy)
{
LISTA pom=pierwszy;
if (pierwszy==NULL) printf("Lista jest pusta\n");
else
{
while(pom!=NULL)
{
printf ("%f %d \n", pom->waga, pom->status);
pom=pom->nast;
}
}
fflush(stdin);
}
void dodajostatni(LISTA *pierwszy)
{
LISTA pom=*pierwszy, nowy;
nowy=malloc(sizeof(LISTA));
//printf("Podaj nadawce:\n");
//fflush(stdin);
//fgets(nowy->nadawca, 29, stdin);
//printf("%s\n", nowy->nadawca);
printf("Podaj wage:\n");
fflush(stdin);
scanf("%f", &nowy->waga);
printf("Podaj status:\n");
fflush(stdin);
scanf("%d", &nowy->status);
if (pom==NULL)
{
printf("Lista jest pusta\n");
(*pierwszy)=nowy;
(*pierwszy)->poprz=NULL;
(*pierwszy)->nast=NULL;
}
else if (pom!=NULL)
{
while (pom->nast!=NULL) pom=pom->nast;
pom->nast=nowy;
nowy->poprz=pom;
nowy->nast=NULL;
}
fflush(stdin);
}
void usunostatni(LISTA *pierwszy)
{
LISTA pom=*pierwszy;
if ((*pierwszy)->nast==NULL)
{
(*pierwszy)=NULL;
free(pom);
}
else
{
while (pom->nast->nast!=NULL) pom=pom->nast;
pom->nast=NULL;
free(pom->nast);
}
}
void edytuj()
{
}
int main()
{
LISTA pierwszy=malloc(sizeof(LISTA));
pierwszy=NULL;
int x, y;
system("cls");
printf("===========================================================\n");
printf("\tBAZA DANYCH\n");
printf("===========================================================\n\n");
while(x != EOF)
{
printf("Wybierz opcje: \n 1 - Dodaj rejestr \n 2 - Edytuj rejestr \n 3 - Usun rejestr \n 4 - Wypisz wpisy \n 5 - Zakoncz \n");
fflush(stdin);
y = getch();
if(y=='1')
dodajostatni(&pierwszy);
else if(y == '2')
edytuj();
else if(y == '3')
usunostatni(&pierwszy);
else if(y == '4')
wypisz(pierwszy);
else if(y == '5') {
break;
}
else printf("Niepoprawna opcja\n");
}
system ("PAUSE");
return 0;
}