路过的大侠帮帮忙啊!
以下是我写的程序。其中部分代码存在文本中,那部分没有错误,请不用怀疑!很奇怪,编译时总是有这些错误提示:
--------------------Configuration: ben - Win32 Debug--------------------
Compiling...
ben.c
D:\我的文档\procedure\Benthy_list\ben.c(35) : error C2143: syntax error : missing ')' before 'type'
D:\我的文档\procedure\Benthy_list\ben.c(35) : error C2198: 'visit' : too few actual parameters
D:\我的文档\procedure\Benthy_list\ben.c(35) : error C2095: 'listtraverse' : actual parameter has type 'void' : parameter 2
Error executing cl.exe.
ben.obj - 3 error(s), 0 warning(s)
不明白啊!我到底哪出错了???
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include"function.txt"
void listtraverse(SDI *head, void (*p)(SDI *q))
{
SDI *t=NULL;
if(!head) { printf("链表已不存在!\n"); exit(0); }
t=head->next;
while(t)
{
(*p)(t);
t=t->next;
}
}
void visit(SDI *q)
{
if(q->total>80)
printf("%s %s %f\n",q->name,q->munber,q->total);
}
vvoid main()
{
SDI *sel1=NULL;
sel1=initlist();
printf("输出结点信息\n");
listdisplay(sel1);
listtraverse(sel1, visit(SDI *q));
}
下面是function.txt的内容,若要上机调试可用到
typedef struct studentsinformation
{
char name[20];
char munber[15];
float total;
struct studentsinformation *next;
}SDI;
//基本操作
SDI *initlist() //构造一个链表
{
SDI *p=NULL,*q=NULL,*head=NULL;
int m=0,i=0;
p=(SDI *)malloc(sizeof(SDI));
head=p;
printf("输入要构建的结点个数\n");
scanf("%d",&m);
for(i=m;i>0;--i)
{
q=(SDI *)malloc(sizeof(SDI));
printf("第%d结点\n",m+1-i);
scanf("%f",&q->total);
flushall();
gets(q->name);
gets(q->munber);
p->next=q; p=q;
}
p->next=NULL;
return head;
}
void listdisplay(SDI *head) //输出整个链表的信息
{
SDI *p=NULL;
if(!head) printf("链表已不存在\n");
else
{
p=head->next;
if(!p) printf("空链表!\n");
else
while(p)
{
printf("%s %s %f\n",p->name,p->munber,p->total);
p=p->next;
}
}
}
void destroylist(SDI **head) //销毁链表
{
free(*head);
*head=NULL;
}
clearlist(SDI *head) //重置链表为空表
{
if(head) head->next=NULL;
else printf("链表已不存在!\n");
}
int listempty(SDI *head) //判断链表是否为空
{
int flag=1;
if(head)
{ if(head->next) flag=0;
printf("%d\n",flag);
}
else { printf("链表已不存在,操作失败!\n"); exit(0); }
return flag;
}
int listlength(SDI *head) //求链表的长度
{
int n=0;
SDI *p=NULL;
if(!head) { printf("链表已不存在\n"); exit(0); }
else
{
p=head->next;
while(p) { n++; p=p->next; }
return n;
}
}
SDI *getelem(SDI *head,int i) //查找链表的第i个元素
{
SDI *p=NULL;
int k=0;
k=listlength(head);
if(k==-1||i<1||i>k) printf("不存在此元素\n");
else
{
p=head;
while(i)
{
p=p->next;
i--;
}
}
return p;
}
int locateelem(SDI *head,int (*p)(SDI *q))
{
int i=0,flag=0;
SDI *t=NULL;
if(!head) { printf("链表已不存在\n"); exit(0); }
t=head->next;
while(t)
{
i++;
flag=(*p)(t);
if(flag) return i;
t=t->next;
}
return 0;
}
int compare(SDI *q)
{
if(q->total>90) return 1;
else return 0;
}