Mam do zrobienia liste jednokierunkową z wczytaniem danych z pliku do listu
nie działa mi usuwanie pierwszego elementu z listy wiec dlatego ta funkcja jest wyłaczona z kompilacji
a poza tym wszytko dobrze kompiluje tylko nie wiem dlaczego nie chce mi wczytac danych z pilku do listu?
prosze o szybką pomoc.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct kierowca
{
int id;
char nazwisko[20];
char imie[20];
char nr_prawa_jazdy[20];
char nr_rej_samochodu[10];
struct kierowca *nast;
} kierowca;
void OdczytZPliku(kierowca* poczatek) {
kierowca* nowypocz;
kierowca* pomoc;
FILE* dane=fopen("dane.txt", "r");
if(dane==NULL) {
printf("brak pliku\n");
return;
}
nowypocz=malloc(sizeof(struct kierowca));
//pomoc=(sizeof(struct kierowca));
while(!feof(dane))
{
fscanf(dane, "%s, %s, %s, &s ", nowypocz->nazwisko, nowypocz->imie, &nowypocz->nr_prawa_jazdy, &nowypocz->nr_rej_samochodu);
if(poczatek==NULL)
poczatek=nowypocz;
else {
pomoc=poczatek;
while(pomoc->nast!=NULL)
pomoc=pomoc->nast;
pomoc->nast=nowypocz;
}
}
fclose(dane);
}
kierowca* dodaj_element(kierowca* poczateklisty, kierowca* wprowadzany)
{
kierowca* nowypocz;
nowypocz = (kierowca *)malloc(sizeof(kierowca));
nowypocz->id = wprowadzany->id;
strcpy(nowypocz->nazwisko, wprowadzany->nazwisko);
strcpy(nowypocz->imie, wprowadzany->imie);
strcpy(nowypocz->nr_prawa_jazdy, wprowadzany->nr_prawa_jazdy);
strcpy(nowypocz->nr_rej_samochodu, wprowadzany->nr_rej_samochodu);
nowypocz->nast = poczateklisty;
return nowypocz;
}
void pokaz_liste(kierowca* poka)
{
int i=1;
kierowca* pomoc = poka;
while(pomoc != NULL)
{
printf("%d. Nazwisko:%s Imie:%s, Nr prawa jazdy: %s, NR rej.: %s\n", i, pomoc->nazwisko, pomoc->imie, pomoc->nr_prawa_jazdy, pomoc->nr_rej_samochodu);
pomoc=pomoc->nast;
i++;
}
}
int usun_pierwszy_element(kierowca *head)
{
if(head != NULL){
kierowca *wprowadzany = head;
*head = *head->nast;
free(wprowadzany);
}
else{
printf("Lista jest pusta!");
}
}
/*int wycofanie (kierowca*head, char nazwa)
{
int retcode;
if(*head == NULL)
{
printf("Lista jest pusta!");
retcode=0;
}
else{
if (nazwa==(head)->nazwisko){
wprowadzony = *head;
*head = *head->nast;
free(wprowadzony);
retcode=1;
}
else
{
nowypocz = *head;
ostatni = (*head) -> nast;
}
while (ostatni != NULL && ostani -> nazwisko != nazwa)
{
nowypocz = ostatni;
ostatni = ostatni->nast;
if (ostatni == NULL)
retcode = 0;
else{
wprowadzony = ostatni;
ostatni->nast=nowypocz->nast;
free(wprowadzony);
retcode=1;
}}}
return retcode;
}*/
int policz_liste(kierowca* poka)
{
int a = 0;
kierowca* pomoc = poka;
while(pomoc != NULL)
{
a++;
pomoc = pomoc->nast;
}
return a;
}
int main()
{
int x;
kierowca *ostatni = NULL;
kierowca *tmpkierowca = NULL;
kierowca *poczateklisty = NULL;
do{
printf("Menu programu:\n");
printf("1. Dodaj kierowce\n");
printf("2. Start zawodnika\n");
printf("3. Wycofaj zawodnika\n");
printf("4. Wyswietl liste\n");
printf("5. Policz liste\n");
printf("6. Zakoncz\n");
scanf("%d", &x);
printf("\n");
switch (x){
case 1:{
kierowca *wprowadzany = malloc(sizeof(kierowca));
printf("Id:\n");
scanf("%d", &wprowadzany->id);
printf("Nazwisko: ");
scanf("%s", &wprowadzany->nazwisko);
printf("Imie: ");
scanf("%s", &wprowadzany->imie);
printf("Numer prawa jazdy: ");
scanf("%s", &wprowadzany->nr_prawa_jazdy);
printf("Numer rej. samochodu: ");
scanf("%s", &wprowadzany->nr_rej_samochodu);
poczateklisty = dodaj_element(poczateklisty, wprowadzany);
}break;
case 2:{
usun_pierwszy_element(poczateklisty);
}break;
case 3:{
//wycofanie(poczateklisty);
}break;
case 4:{
pokaz_liste(poczateklisty);
}break;
case 5:{
policz_liste(poczateklisty);
}break;
}
}while(x != 6);
return 0;
}