首页
社区
课程
招聘
[旧帖] [求助]请高人帮我看看这段程序 0.00雪花
发表于: 2009-4-9 16:55 3139

[旧帖] [求助]请高人帮我看看这段程序 0.00雪花

2009-4-9 16:55
3139
为什么
void qsort(void *lineptr[],int left,int right,int (*comp)(void *,void *));
函数在调用的时候没有执行就直接跳过了?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAXLINES 5000
char *lineptr[MAXLINES];
int reverse=0;

int readlines(char *lineptr[],int nlines);
void writelines(char *lineptr[],int nlines);

void qsort(void *lineptr[],int left,int right,int (*comp)(void *,void *));
int numcmp(const char *,const char *);
main(int argc,char *argv[])
{
         int nlines,c;
         int numeric=0;
         while(--argc>0&&(*++argv)[0]=='-')
              while(c=*++argv[0])
                   switch(c)
                   {
                            case 'n':numeric=1;
                                     break;
                            case 'r':reverse=1;
                                     break;
                            default:
                                    printf("find:illegal option %c\n",c);
                                    argc=0;
                                    break;
                   }
         if((nlines=readlines(lineptr,MAXLINES))>=0)
           {
           qsort((void **)lineptr,0,nlines-1,(int(*)(void*,void*))(numeric ? numcmp:strcmp));
           writelines(lineptr,nlines);
           return 0;
           }   
         else
             {
                  printf("input too big to sort\n");
                  return 1;
                  }
         }
#define MAXLINE 1000
int getline(char *,int);
char *alloc(int);
int readlines(char *lineptr[],int maxline)
{
    int len,nlines;
    char *p,line[MAXLINE];
    nlines=0;
    while((len=getline(line,MAXLINE))>0)
         if(nlines>=MAXLINE||(p=alloc(len))==NULL)
           return -1;
         else
             {
             line[len-1]='\0';
             strcpy(p,line);
             lineptr[nlines++]=p;
             }
    return nlines;
    }
void writelines(char *ptrline[],int nlines)
{
     int i;
     for(i=0;i<nlines;i++)
        printf("%s\n",lineptr[i]);
}

void qsort(void *v[],int left,int right,int (*comp)(void *,void *))
{
     int i,last;
     void swap(void *v[],int,int);
     if(left>=right);
       return;
     swap(v,left,(left+right)/2);
     last=left;
     for(i=left+1;i<=right;i++)
        if(reverse)
          {
          if((*comp)(v[i],v[left])>0)
          swap(v,++last,i);
          }
        else
          if((*comp)(v[i],v[left])<0)
          swap(v,++last,i);
     swap(v,left,last);
     qsort(v,left,last-1,comp);
     qsort(v,last+1,right,comp);
     }
int getline(char line[],int lim)
{
    int c,i;
    for(i=0;i<lim-1&&(c=getchar())!='#'&&c!='\n';i++)
       line[i]=c;
    if(c=='\n')
      {
       line[i]=c;
       i++;   
       }
    line[i]='\0';
    return i;
    }
#define ALLOCSIZE 10000
static char allocbuf[ALLOCSIZE];
static char *allocp=allocbuf;
char *alloc(int n)
{
     if(allocbuf+ALLOCSIZE-allocp>=n)
       {
       allocp+=n;
       return allocp-n;
       }
     else
         {
         return 0;
         }
}
int numcmp(const char *s1,const char *s2)
{
    double v1,v2;
    v1=atof(s1);
    v2=atof(s2);
    if(v1<v2)
      return -1;
    else if(v1>v2)
           return 1;
    else
        return 0;
    }
void swap(void *v[],int i,int j)
{
     void *temp;
     temp=v[i];
     v[i]=v[j];
     v[j]=temp;
     }

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
如果小弟有什么地方写的不对 还望各位大哥多多指教
2009-4-9 17:24
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
if((nlines=readlines(lineptr,MAXLINES))>=0)
           {
           qsort((void **)lineptr,0,nlines-1,(int(*)(void*,void*))(numeric ?numcmp:strcmp));
多了一个星

qsort((void*) lineptr, 0, nliens-1
2009-4-9 18:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
错误不在那里啊
2009-4-9 20:53
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
copy 程序到vc 中运行
test.cpp(74) : warning C4390: ';' : empty controlled statement found; is this the intent?
if(left>=right);   去掉;
输入
9 8 7
1 2 3
#回车
输出
1 2 3
9 8 7

程序 我也看不懂 好像是排序
2009-4-9 23:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我觉得你的qsort有问题,  comp 没有定义啊...
2009-4-10 10:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
comp 只是个形式参数啊
2009-4-10 12:10
0
游客
登录 | 注册 方可回帖
返回
//