| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 522 人关注过本帖
标题:我想对文件内容导入结构体数组进行排序的问题,能输出结果,但得不到我想要 ...
只看楼主 加入收藏
丶Losion
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-4-12
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:4 
我想对文件内容导入结构体数组进行排序的问题,能输出结果,但得不到我想要的功能,希望能帮我看看,十分感谢。
文件
StudentMessage.txt
0144253   罗兴        软件146               2015-01-01     13617095676  0245689   王八        销售123               2015-12-04     14523687532  0144255   罗龙        临床126               2012-03-03     13518966472  0144356   李四        软件126               2015-04-23     13275688542  0144276   麻子      男 苹峒?35               2012-03-05     15678624596  0144223   赵王        统计134               2013-14-13     13589421678  0144569   刘星        工商146               2015-11-24     14896475216  0144567   陈建        艺术148               2015-12-10     13472685486  
代码
#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define n 100

  
/*函数声明*/  
void QuickSort(struct student a[n],int p,int r); //快速排序  
int Partition(struct student a[n],int p,int r);      //分治法  

/********************* 定义社员信息结构体 **********/
struct student
{     
 //社员信息(学号,姓名,性别,专业班级,积分,等级,入团时间,电话);
   char ID[10];
   char name[10];
   char sex[4];
   char major[10];
   char score[6];
   char grade[6];
   char time[15];
   char phone[13];
};


void main()
{
    int i;
  int size;
  student *a;
  FILE *fp;
 if((fp=fopen("StudentMessage.txt","rb+"))==NULL)                           //StudentMessage社员信息文件名
 {
  printf("文件打开失败!\n");
  exit(1);
 }
 else
 {
  fseek(fp,0,SEEK_END);       //移动文件指针到文件尾
   size=ftell(fp)/sizeof(struct student); //得到文件中有多少条记录
  printf("%d\n\n", size);
  a=new student[ size];
  rewind(fp);
  for(i=0;i< size;i++)
  {
      fread(&a[i],sizeof(struct student),1,fp);
      printf("%s   %s\n",a[i].name,a[i].time);
  }
  printf("\n\n");
  fclose(fp);
 }
  QuickSort(a,1,size-1);

    for(i=size-1;i>=1;i--)
    {

        printf("%s  %s  %s  %s  %s  %s   %s  %s",a[i].ID,a[i].name,a[i].sex,a[i].major,a[i].score,a[i].grade,a[i].time,a[i].phone);
        printf("\n");
    }

}



/*函数定义*/  
void QuickSort(struct student a[n],int p,int r) //快速排序  
{  
    int q;  
    if(p<r)               //如果p大于等于r 那么就程序不执行  
    {  
        q = Partition(a,p,r);  //调用分治法 找到q的值  
        QuickSort(a,p,q-1);  
        QuickSort(a,q+1,r);  
    }  
}  
  
int Partition(struct student a[n],int p,int r) //分治法,作用就是将数组分为A[p..q-1] 和A[q+1..r]  
{                                                   //然后调整元素使得A[p..q-1]小于等于q,也小于等于A[q+1..r]  
    int i,j;  
    student x,temp;
    x = a[r];  //将最后一个值保存在x中  
    i = p-1;   //开始的时候将i 移动到数组的外面  
    for( j=p; j<=r-1; j++)  
    {  
        if(strcmp(a[j].time,x.time))
        {  
            i +=1;  
            temp = a[i]; //exchange  
            a[i] = a[j];  
            a[j] = temp;  
        }  
    }  
  
    temp = a[i+1];  //exchange  
    a[i+1] = a[r];  
    a[r] = temp;  
  
    return i+1;  //返回q值  
}
运行结果
搜索更多相关主题的帖子: 结构体 软件 统计 
2015-06-13 17:44
丶Losion
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-4-12
收藏
得分:0 
运行结果:

图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 丶Losion 于 2015-6-13 18:07 编辑 ]
2015-06-13 17:46
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:10 
#include<stdio.h>
#define size 10
#define n 100
int Partition(int a[n],int p,int r) //分治法,作用就是将数组分为A[p..q-1] 和A[q+1..r]  
{                                                   //然后调整元素使得A[p..q-1]小于等于q,也小于等于A[q+1..r]  
    int i,j;  
    int x,temp;
    x = a[r];  //将最后一个值保存在x中  
    i = p-1;   //开始的时候将i 移动到数组的外面  
    for( j=p; j<=r-1; j++)  
    {  
        if(a[j]>x)
        {  
            i +=1;  
            temp = a[i]; //exchange  
            a[i] = a[j];  
            a[j] = temp;  
        }  
    }  
  
    temp = a[i+1];  //exchange  
    a[i+1] = a[r];  
    a[r] = temp;  
  
    return i+1;  //返回q值  
}
void QuickSort(int a[n],int p,int r) //快速排序  
{  
    int q;  
    if(p<r)               //如果p大于等于r 那么就程序不执行  
    {  
        q = Partition(a,p,r);  //调用分治法 找到q的值  
        QuickSort(a,p,q-1);  
        QuickSort(a,q+1,r);  
    }  
}
int main(){
    int a[10]={3,4,1,6,2,5,7,9,8,10};
     QuickSort(a,1,size-1);
     for(int i=0;i<10;i++){
         printf("%d ",a[i]);
     }
}
排序函数有问题

剑栈风樯各苦辛,别时冰雪到时春
2015-06-13 18:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
這麽點數據,弄那麽複雜的排序算法,自找錯誤。

授人以渔,不授人以鱼。
2015-06-14 00:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
..
(228.96 KB)



[ 本帖最后由 TonyDeng 于 2015-6-14 10:12 编辑 ]

授人以渔,不授人以鱼。
2015-06-14 02:13
快速回复:我想对文件内容导入结构体数组进行排序的问题,能输出结果,但得不到我 ...
数据加载中...
 
   



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

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