指向列表中指针赋值的指针

时间:2015-01-11 14:08:37

标签: c list

#include <stdio.h> 
#include <stdlib.h>
#define ROZ 100
struct lista
{
    char *imie ;
    char *nazwisko;
    long int data;
    struct wsk * next;
};

int add (struct lista** head)
{
    struct lista *wsk;
    wsk=(struct lista*)malloc(sizeof(struct lista));
    long int data;
    wsk->imie=(char*)malloc(ROZ);
    if(wsk-> imie==NULL)
        return -1;
    wsk->nazwisko=(char*)malloc(ROZ);
    if(wsk->nazwisko==NULL)
        return -2;
    printf("podaj imie");
    fgets(wsk->imie,ROZ,stdin);
    printf("podaj nazwisko");
    fgets(wsk->nazwisko, ROZ, stdin);
    printf("podaj date urodzenia");
    scanf("%ld",&data);
    wsk->data=data;
    wsk->next=(*head);
    (*head)=wsk;
}


main()
{
    struct lista *head, *wsk;
    int a, spr;
    while(a!=4)
    {
        printf("Aby wypisac liste wpisz 1, aby dodac wiersz wpisz 2, aby usunac wiersz wpisz 3, aby zakonczyc prace programu wpisz 4");
        scanf("%d",&a);
        if(a==2)
        {
            spr=add(&head);
            {
                if(spr<0)
                    printf("blad");
            }
        }
    }
}

我不知道我怎么想移动列表的头部(29行),程序不在那里编译。

1 个答案:

答案 0 :(得分:2)

struct lista
{
    char *imie ;
    char *nazwisko;
    long int data;
    struct wsk * next;
};

此处,只需将wsk更改为lista,然后再添加

return 0; 

在函数add的末尾。

此外,当您第一次进入while循环时,a未初始化且包含&#34;垃圾值&#34;。因此,条件可能/可能不是真的。要修复它,只需将while循环更改为do...while循环,因为此循环在检查条件之前至少执行一次。

检查scanfmalloc等的返回值以确定它们是否成功也是一种很好的做法。