Usuwanie elementu

0
 #include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct OSOBAA osoba;
struct OSOBAA
{
char imie[25],nazwisko[25];
int rok,mies,dzien;
osoba *next;
};
void addBack(osoba **lista)
{
if(*lista==NULL)
{
*lista=malloc(sizeof(osoba));
char imie[25], nazwisko[25];
printf("Podaj dane osoby:\n");
scanf("%s %s %d %d %d",&imie, &nazwisko, &(*lista)->rok, &(*lista)->mies, &(*lista)->dzien);
strcpy((*lista)->imie,imie);
strcpy((*lista)->nazwisko,nazwisko);
(*lista)->next=NULL;
}
else
{
osoba *tym=*lista;
while(tym->next != NULL)
{
tym=tym->next;
}
tym->next=malloc(sizeof(osoba));
char imie[25], nazwisko[25];
printf("Podaj dane osoby:\n");
scanf("%s %s %d %d %d",&imie, &nazwisko, &tym->next->rok, &tym->next->mies, &tym->next->dzien);
strcpy(tym->next->imie,imie);
strcpy(tym->next->nazwisko,nazwisko);
tym->next->next=NULL;
}
}

**void usuwanie(osoba **lista) // tuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uswanie, zeby nie szukac
{
int ktory,licznik=1;
printf("Podaj nr elementu do usuniecia");
scanf("%d",&ktory);
while(lista)
{
if(licznik==ktory)
{
if((*lista)->next!=NULL)
{
osoba *tym=*lista;
*lista=(*lista)->next;
free(tym);
return 0;
}
return 0;
}
else
{
lista=(*lista)->next;
}
licznik++;
}
}**
void wypisz(osoba* lista)
{
int i=1;
while(lista){
printf("%d| %s %s %d %d %d\n", i, lista->imie, lista->nazwisko, lista->rok, lista->mies, lista->dzien);
lista = lista->next;
i++;
}
printf("\n");
}
void redingfromfile(osoba **lista)
{
FILE *inp = fopen("baza.txt","r");
while(feof(inp) == 0)
{
if(*lista==NULL)
{
*lista=malloc(sizeof(osoba));
char imie[25], nazwisko[25];
fscanf(inp,"%s %s %d %d %d",&imie, &nazwisko, &(*lista)->rok, &(*lista)->mies, &(*lista)->dzien);
strcpy((*lista)->imie,imie);
strcpy((*lista)->nazwisko,nazwisko);
(*lista)->next=NULL;
}
else
{
osoba *tym=*lista;
while(tym->next != NULL)
{
tym=tym->next;
}
tym->next=malloc(sizeof(osoba));
char imie[25], nazwisko[25];
fscanf(inp,"%s %s %d %d %d",&imie, &nazwisko, &tym->next->rok, &tym->next->mies, &tym->next->dzien);
strcpy(tym->next->imie,imie);
strcpy(tym->next->nazwisko,nazwisko);
tym->next->next=NULL;
if(feof(inp)!=0)
tym->next=NULL;
}
}
fclose(inp);
}
void writingtofile(osoba *lista)
{
    FILE *out = fopen("baza.txt", "w");
    while(lista)
    {
        fprintf(out,"%s %s %d %d %d\n", lista->imie, lista->nazwisko, lista->rok, lista->mies, lista->dzien);
        lista=lista->next;
    }
    fclose(out);
}

int main()
{
    osoba *lista=NULL;
    int men;
    redingfromfile(&lista);
    for(;;)
    {
        printf("podaj komende:\n1- wypisz\n2- dodaj\n3- zapisz do pliku\n4- usuwanie\n");
        scanf("%d",&men);
        switch(men)
        {
            case 1:
            	system("cls");
                wypisz(lista);
                break;
                
            case 2:
            	system("cls");
                addBack(&lista);
                break;
            case 3:
            	system("cls");
                writingtofile(lista);
                break;
            case 4:
            	system("cls");
                usuwanie(&lista);
                break;
            
        }

    }
    czyszczenie(&lista);

    return 0;
}

Usuwa tylko pierwsza osobę, jak to zmienić aby mieć swobodę?

0

Najpierw to proponuję sformatować kod i napisać co dokładnie chcesz osiągnąć.

0
 void usuwanie(osoba **lista)
{
int ktory,licznik=1;
printf("Podaj nr elementu do usuniecia");
scanf("%d",&ktory);
while(lista)
{
if(licznik==ktory)
{
if((*lista)->next!=NULL)
{
osoba *tym=*lista;
*lista=(*lista)->next;
free(tym);
return 0;
}
return 0;
}
else
{
lista=(*lista)->next;
}
licznik++;
}
}

chodzi o to, ta linia kodu ma usuwać z pliku (baza danych) konkretną osobę np, 3 na liście. Obecnie działa to tylko dla pierwszej osoby, i nie wiem jak to zmienić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1