Usuwanie elementu z listy jednokierunkowej

Odpowiedz Nowy wątek
2011-01-16 18:16
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;     
}

Pozostało 580 znaków

2011-01-16 18:56
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.

Pozostało 580 znaków

2011-01-16 18:59
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

Pozostało 580 znaków

2011-01-16 19:02
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...


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 1x, ostatnio: Shalom, 2011-01-16 19:03
O_O Shalom dziś chyba wypłatę dostał, że taki dobry humor :D - Blood 2011-01-16 19:03

Pozostało 580 znaków

2011-01-16 19:07
0

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

Jeśli nie masz czasu na formatowanie kodu to radziłbym nie brać się za programowanie ;) - Blood 2011-01-16 19:24
Dokładnie, formatowanie UPRASZCZA kodzenie a nie jest "marnowaniem czasu". - [losowa nazwa] 2011-01-16 20:00
Ba, porządnego formatowania kodu nie da się przecenić. Nie tylko oszczędza to sporo czasu, ale i samo z siebie pozwala na uniknięcie paru głupich, a wcale nie oczywistych - jeśli "olejemy" formatowanie - błędów kompilacji. No i poza tym, sformatowanie czyjegoś/swojego starego kodu chociażby w NetBeans to kwestia uderzenia w Alt+Shift+F. ;) - Xupicor 2011-01-17 07:59

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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