#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行),程序不在那里编译。
答案 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
循环,因为此循环在检查条件之前至少执行一次。
检查scanf
,malloc
等的返回值以确定它们是否成功也是一种很好的做法。