Usuwanie elementu z listy jednokierunkowej

0

Mam problem z funkcja usuwająca element z listy mam coś takiego : najpierw ma usuwam element z listy później nadpisywać zawartość pliku coś namieszałem ;/ ostro chyba .... czytanie danych z pliku do listy działa poprawnie tylko czasem jakieś krzaczki jak wypisuje dane z pliku w głównym programie np x;)>



void usun(el_listy *lista, char *q)
{   
    
FILE *plik;
el_listy *wsk=lista;
plik=fopen("ggg.txt","w");
wsk->nazwisko=(char * )malloc(20);
wsk->imie=(char * )malloc(20);
wsk->pesel=(char * )malloc(20);
q=(char *)malloc(20);

printf("Podaj nazwisko osoby ktora chcesz usunac:");     
scanf("%s",&q);  

while (wsk->next!=NULL)
{
if (wsk->next->nazwisko==q)
{
el_listy *usuwany=wsk->next;
wsk->next=usuwany->next;
free(usuwany);
}
else 
wsk=wsk->next;                        
}

while (wsk->next!=NULL)
{
wsk=wsk->next;     
fprintf(plik,"%s\n",wsk->imie);
fprintf(plik,"%s\n",wsk->nazwisko);
fprintf(plik,"%s\n",wsk->pesel);
}

}


void utwurzliste(el_listy *lista)
{  
el.nazwisko=(char * )malloc(20);
el.pesel=(char *)malloc(5);
el.imie=(char *)malloc(5);
el_listy *nowy;
el_listy *wsk=lista;;
FILE *plik=fopen("ggg.txt","a+");
 
while (fscanf(plik,"%s",el.nazwisko)!= EOF)
{
nowy = (el_listy *)malloc(sizeof(el_listy));
nowy->nazwisko=(char * )malloc(20);
nowy->imie=(char * )malloc(20);
nowy->pesel=(char * )malloc(20);
wsk->next=nowy;
wsk=nowy;
nowy->next=NULL; 

strcpy(nowy->nazwisko,el.nazwisko);  
strcpy(nowy->imie,el.imie);  
strcpy(nowy->pesel,el.pesel);  

printf("%s\n",nowy->nazwisko);  
printf("%s",nowy->imie);  
printf("%s\n",nowy->pesel);  


}
printf("\n");
fclose(plik);
}
int main()        
{
char naz[10],im[10],pes[10],q[10];
int rok_ur,od_kied;
float pen;
first=(el_listy*)malloc(sizeof(el_listy));
first->next=NULL; 
utwurzliste(first);
usun(first,q);
system("PAUSE");
return 0;     
}

 
0

Zdaje sie, ze gdzies juz wstawiales ten kod na tym forum i zwrocono Ci uwage, ze masz blad ortograficzny w nazwie funkcji. Poza tym - sformatuj kod, inaczej nikt go nie przeczyta.

0

jak inaczej normalnie jest wstawiony w tagach od C wiem że jest błąd ale czy to gra jaką różnice ? wydaje mi się że nie

0

Jestem dziś miłosierny i zademonstruję ci jak wygląda sformatowany kod:


void utwurzliste(el_listy *lista);
void usun(el_listy *lista, char *q);

int main()
{
    char naz[10],im[10],pes[10],q[10];
    int rok_ur,od_kied;
    float pen;
    first=(el_listy*)malloc(sizeof(el_listy));
    first->next=NULL;
    utwurzliste(first);
    usun(first,q);
    system("PAUSE");
    return 0;
}

void usun(el_listy *lista, char *q)
{
    FILE *plik;
    el_listy *wsk=lista;
    plik=fopen("ggg.txt","w");
    wsk->nazwisko=(char * )malloc(20);
    wsk->imie=(char * )malloc(20);
    wsk->pesel=(char * )malloc(20);
    q=(char *)malloc(20);
    printf("Podaj nazwisko osoby ktora chcesz usunac:");
    scanf("%s",&q);
    while (wsk->next!=NULL)
    {
        if (wsk->next->nazwisko==q)
        {
            el_listy *usuwany=wsk->next;
            wsk->next=usuwany->next;
            free(usuwany);
        }
        else
            wsk=wsk->next;
    }

    while (wsk->next!=NULL)
    {
        wsk=wsk->next;
        fprintf(plik,"%s\n",wsk->imie);
        fprintf(plik,"%s\n",wsk->nazwisko);
        fprintf(plik,"%s\n",wsk->pesel);
    }
}


void utwurzliste(el_listy *lista)
{
    el.nazwisko=(char * )malloc(20);
    el.pesel=(char *)malloc(5);
    el.imie=(char *)malloc(5);
    el_listy *nowy;
    el_listy *wsk=lista;;
    FILE *plik=fopen("ggg.txt","a+");
    while (fscanf(plik,"%s",el.nazwisko)!= EOF)
    {
        nowy = (el_listy *)malloc(sizeof(el_listy));
        nowy->nazwisko=(char * )malloc(20);
        nowy->imie=(char * )malloc(20);
        nowy->pesel=(char * )malloc(20);
        wsk->next=nowy;
        wsk=nowy;
        nowy->next=NULL;

        strcpy(nowy->nazwisko,el.nazwisko);
        strcpy(nowy->imie,el.imie);
        strcpy(nowy->pesel,el.pesel);

        printf("%s\n",nowy->nazwisko);
        printf("%s",nowy->imie);
        printf("%s\n",nowy->pesel);
    }
    printf("\n");
    fclose(plik);
}

Oprócz tego nie dostaniesz ode mnie pomocy, bo niestety nie posłuchałeś mojej rady. Jeśli nie umiesz, to piszesz max 15 linijek...

0

nie mam na to czasu jeśli nie chcesz pomagać to nie pisz

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