Witam. Dopiero zaczynam zabawę z listami. Chcę aby ta lista była wyrazami. Lista powinna zapisywać do pliku. Program kompiluje i nie wykazuje żadnych błędów. Problem polega na tym że mogę dodać tylko jeden rekord, później menu zapętla się lub pojawia się komunikat i program przestaje działać. Pomożecie?
#include <stdio.h>
#include <stdlib.h>
struct element{
char **rekord;
char *nazwa;
struct element *nast;
struct element *poprz;
};
struct element *pierwszy = NULL;
struct element *ostatni = NULL;
int dodaj(){
int i;
struct element *nowy;
char *nazwa;
char **rekord;
rekord=(char**)malloc(100*sizeof(char*));
if((nowy = (struct element *)malloc(sizeof(struct element)))==NULL)
return 1;
for(i=0;i<3;i++)
{printf("Podaj rekord: ");
scanf("%s",&rekord[i]);
}
nazwa = (char *)malloc(100*sizeof(char));
printf("Podaj nazwe: ");
scanf("%s",nazwa);
for(i=0;i<3;i++)
nowy->rekord[i]=rekord[i];
nowy->nazwa = nazwa;
if(pierwszy==NULL)
{
nowy->nast=NULL;
nowy->poprz=NULL;
pierwszy=nowy;
ostatni=nowy;
} else {
nowy->nast=NULL;
nowy->poprz=ostatni;
ostatni->nast=nowy;
ostatni=nowy;
}
return 0;
}
void wyswietl(){
struct element *tmp;
int i;
tmp=pierwszy;
if(tmp==NULL) printf("Brak elementow do wyswietlenia");
while(tmp!=NULL){
printf("%s ", tmp->nazwa);
for(i=0;i<3;i++)
printf("%s ", &tmp->rekord[i]);
tmp=tmp->nast;
printf("\n");
}
}
void zapisz(){
struct element *tmp;
int i,j;
tmp=pierwszy;
if(tmp==NULL) printf("Brak elementow do wyswietlenia");
FILE * plik=fopen("dane.csv","w");
while(tmp!=NULL){
fprintf(plik,"%s,", tmp->nazwa);
for(i=0;i<3;i++)
{
fprintf(plik,"%s", tmp->rekord[i]);
if(i!=2)
fprintf(plik,",");
}
tmp=tmp->nast;
fprintf(plik,"\n");
}
fclose(plik);
}
void menu(){
printf("\n1 - dodaj rekord\n2 - wyswietl cala liste\n3 - jakas inna niegotowa opcja\n4 - Zapisz\n 5 - Koniec \n");
}
int main(){
int z=0;
int liczba;
printf("Program Lista jednokierunkowa\n");
menu();
while(z!=4){
printf("\nOpcja: ");
scanf("%d",&z);
switch(z){
case 1: system("cls");
dodaj();
menu(); break;
case 2: system("cls");
printf("\n");
wyswietl();
menu(); break;
case 3: system("cls");
menu();
case 4: system("cls");
printf("\n");
zapisz();
menu();
break;
case 5: printf("Koniec\n"); break;
default: printf("Brak takiej opcji!!!\n"); break;
}
}
return 0;
}