Witam, mam następujący problem, piszę właśnie programik który odczytuję listę z pliku i daje możliwość dodania nowych pozycji do listy, pozycje są potem dopisywane do pliku. Na samym początku zrobiłem 2 oddzielne programiki, jeden zapisywał dane do pliku, drugi odczytywał i nie było problemu. Teraz przyszła pora na to by wrzucić wszystko do jednego programu i pojawił się problem. Problem polega na tym, że wywołując funkcję, trzeba ją wywołać z trzema wskaźnikami do listy.
Oto co mi pokazuje kompilator.
A to kod całego programu:
Proszę o pomoc i pozdrawiam, Krzysiek
Oto co mi pokazuje kompilator.
dedal<XXXXX>$ cc -o zapis_odczyt zapis_odczyt.c
"zapis_odczyt.c", line 8: syntax error before or at: *
"zapis_odczyt.c", line 8: parameter redeclared: przedmiot
"zapis_odczyt.c", line 8: parameter redeclared: przedmiot
"zapis_odczyt.c", line 9: syntax error before or at: *
"zapis_odczyt.c", line 9: parameter redeclared: przedmiot
"zapis_odczyt.c", line 9: parameter redeclared: przedmiot
"zapis_odczyt.c", line 10: syntax error before or at: *
"zapis_odczyt.c", line 10: parameter redeclared: przedmiot
"zapis_odczyt.c", line 10: parameter redeclared: przedmiot
cc: acomp failed for zapis_odczyt.c
A to kod całego programu:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ROZMIAR 45
//++++++++++++++++++++++++++++++++ NAGLOWKI FUNKCJI +++++++++++++++++++++++++++++++++++++++++
void menu(void);
void wczytaj_liste(przedmiot* glowny, przedmiot* poprz, przedmiot* biezacy);
void przegladaj(przedmiot* glowny, przedmiot* poprz, przedmiot* biezacy);
void dodaj(przedmiot* glowny, przedmiot* poprz, przedmiot* biezacy);
//++++++++++++++++++++++++++++++++++++++ MAIN +++++++++++++++++++++++++++++++++++++++++++++++
typedef struct przedmiot_ {
char nazwa[ROZMIAR];
char producent[ROZMIAR];
int ilosc;
struct przedmiot_ * nast;
} przedmiot;
int main(void)
{
przedmiot* glowny = NULL;
przedmiot* poprz, * biezacy;
char nazwa_przedmiotu[ROZMIAR];
char producent[ROZMIAR];
char ch;
int koniec = 1;
wczytaj_liste(glowny, poprz, biezacy);
menu();
while(koniec == 1)
{
switch (ch)
{
case 'p' :
fflush(stdin);
przegladaj(glowny, poprz, biezacy);
break;
case 'd' :
fflush(stdin);
dodaj(glowny, poprz, biezacy);
break;
case 'q' :
koniec == 1;
break;
default :
printf("Nie ma takiego dzialania!\n");
}
}
return 0;
}
//++++++++++++++++++++++++++++++++++++++ FUNKCJE ++++++++++++++++++++++++++++++++++++++++++++
//-------------------------------------------------------------------------------------------
void menu()
{
printf("+++++++ MENU +++++++\n");
printf("p - przegladaj liste\n");
printf("d - dodaj do listy\n");
printf("q - wyjdz z programu\n");
}
//-------------------------------------------------------------------------------------------
void wczytaj_liste(przedmiot* glowny, przedmiot* poprz, przedmiot* biezacy)
{
char plik[] = "test.dat";
FILE* fp;
if ((fp = fopen(plik, "a+b")) == NULL)
{
fputs("Nie moge otworzyc pliku test.dat\n", stderr);
exit(1);
}
rewind(fp);
while (feof(fp) == 0)
{
biezacy = (przedmiot *) malloc(sizeof(przedmiot));
if (glowny == NULL)
glowny = biezacy;
else
poprz->nast = biezacy;
biezacy->nast = NULL;
if (fread(biezacy, sizeof(przedmiot), 1, fp) != 1)
{
memset(biezacy, 0, sizeof(przedmiot));
poprz->nast = NULL;
break;
}
poprz = biezacy;
}
fclose(fp);
}
//------------------------------------------------------------------------------------------
void przegladaj(przedmiot* glowny, przedmiot* poprz, przedmiot* biezacy)
{
if (glowny == NULL)
printf("Nie wpisano zadnych danych!\n");
else
printf("Oto Twoja lista przedmiotow:\n");
biezacy = glowny;
while (biezacy != NULL)
{
printf("Przedmiot: %s\n", biezacy->nazwa);
printf("Producent: %s\n", biezacy->producent);
printf(" Ilosc: %d\n\n", biezacy->ilosc);
biezacy = biezacy->nast;
}
}
//-------------------------------------------------------------------------------------------
void dodaj(przedmiot* glowny, przedmiot* poprz, przedmiot* biezacy)
{
char nazwa_przedmiotu[ROZMIAR];
char producent[ROZMIAR];
char plik[] = "test.dat";
FILE *fp;
if ((fp = fopen(plik, "a+b")) == NULL)
{
fputs("Nie moge otworzyc pliku test.dat\n", stderr);
exit(1);
}
rewind(fp);
printf("Rozmiar = %d\n", sizeof(przedmiot));
puts("Podaj nazwe przedmiotu:");
while (gets(nazwa_przedmiotu) != NULL && nazwa_przedmiotu[0] != '\0')
{
biezacy = (przedmiot *) malloc(sizeof(przedmiot));
if (glowny == NULL)
glowny = biezacy;
else
poprz->nast = biezacy;
biezacy->nast = NULL;
strcpy (biezacy->nazwa, nazwa_przedmiotu);
puts ("Podaj nazwe producenta:");
gets(producent);
strcpy(biezacy->producent, producent);
puts ("Podaj ilosc przedmiotow");
scanf ("%d", &biezacy->ilosc);
while (getchar() != '\n')
continue;
if (fwrite(biezacy, sizeof(przedmiot), 1, fp) != 1)
{
printf("Blad przy zapisie danych do pliku!\n");
fclose(fp);
exit(1);
}
puts("Podaj nazwe nastepnego przedmiotu(pusty wiersz konczy dodawanie):");
poprz = biezacy;
}
fclose(fp);
}
//-------------------------------------------------------------------------------------------
Proszę o pomoc i pozdrawiam, Krzysiek