| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 504 人关注过本帖
标题:路过的大侠帮帮忙啊!
只看楼主 加入收藏
Benthy2
Rank: 1
等 级:新手上路
帖 子:25
专家分:7
注 册:2011-12-16
结帖率:66.67%
收藏
已结贴  问题点数:8 回复次数:4 
路过的大侠帮帮忙啊!
以下是我写的程序。其中部分代码存在文本中,那部分没有错误,请不用怀疑!
很奇怪,编译时总是有这些错误提示:
--------------------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;
}
搜索更多相关主题的帖子: void procedure actual before 
2012-04-09 13:38
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
vvoid main()
多打了个v

总有那身价贱的人给作业贴回复完整的代码
2012-04-09 14:15
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:8 
void main()
{
    SDI *sel1=NULL;
   

    sel1=initlist();

    printf("输出结点信息\n");
    listdisplay(sel1);
    listtraverse(sel1, visit);
}

我们都在路上。。。。。
2012-04-09 14:27
Benthy2
Rank: 1
等 级:新手上路
帖 子:25
专家分:7
注 册:2011-12-16
收藏
得分:0 
回复 2楼 embed_xuel
哦,不好意思,void前多了个v是我在复制粘贴过来时不小心的
2012-04-09 19:49
Benthy2
Rank: 1
等 级:新手上路
帖 子:25
专家分:7
注 册:2011-12-16
收藏
得分:0 
回复 3楼 hellovfp
嗯!解决了,thank you!但为什么是listtraverse(sel1, visit);而不是listtraverse(sel1, visit(SDI *q));?
2012-04-09 19:53
快速回复:路过的大侠帮帮忙啊!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012437 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved