#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ę?