指向列表中指针赋值的指针
pointer to pointer assignment in 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 行),程序无法在那里编译。
struct lista
{
char *imie ;
char *nazwisko;
long int data;
struct wsk * next;
};
在这里,只需将wsk
更改为lista
并添加
return 0;
在函数的末尾add
。
此外,当您第一次进入 while
循环时,a
没有被初始化,它包含 "Garbage values"。所以,条件 may/may 不成立。要修复它,只需将 while
循环更改为 do...while
循环,因为此循环在检查条件之前至少执行一次。
检查 scanf
、malloc
等的 return 值以查看它们是否成功也是一个好习惯。
#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 行),程序无法在那里编译。
struct lista
{
char *imie ;
char *nazwisko;
long int data;
struct wsk * next;
};
在这里,只需将wsk
更改为lista
并添加
return 0;
在函数的末尾add
。
此外,当您第一次进入 while
循环时,a
没有被初始化,它包含 "Garbage values"。所以,条件 may/may 不成立。要修复它,只需将 while
循环更改为 do...while
循环,因为此循环在检查条件之前至少执行一次。
检查 scanf
、malloc
等的 return 值以查看它们是否成功也是一个好习惯。