| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 485 人关注过本帖
标题:[求助]我的程序为什么排序那部分不能用,谢谢
只看楼主 加入收藏
linshenjie
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-12-29
收藏
 问题点数:0 回复次数:2 
[求助]我的程序为什么排序那部分不能用,谢谢
这是我写的程序,可是不知道为何排序那一部分没有用????????
求教高手!!!!
谢谢大家~~~~~~

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


void input();
void sort();
void search();
void output();

struct worker /*声明结构体*/
{int num;
char name[10];
char bm[10];
}wo[20];

initial() /*取得数据的组数,并将其返回的函数*/
{
int i,total;
FILE *fp1;
if ((fp1=fopen("wo_list.dat","r"))==NULL)
{
printf("Can not open file!\n");
}
for(i=1;i<=100;i++)
if(fread(&wo[i],sizeof(struct worker),1,fp1)!=1)
{
total=i-1;
break;
}
fclose(fp1);
return(total);

}

void save(int n) /*保存结构体数组的函数*/
{
FILE*fp1;
int i;
if ((fp1=fopen("wo_list.dat","w"))==NULL)
{
printf("Can not open file!\n");
return;
}
for(i=1;i<=n;i++)
if(fwrite(&wo[i],sizeof(struct worker),1,fp1)!=1)
printf("File write error!\n");
fclose(fp1);
}

void input() /*用于输入职工数据的模块*/
{
int i,n,total;
total=initial();
printf("您想输入几位职工的信息? ");

scanf("%d",&n);
printf("\n\n");
for(i=total+1;i<=(n+total);i++)
{

printf("请输入职工信息%d:\n",i);
printf("职工号:");
scanf("%d",&wo[i].num);
printf("姓名:");
scanf("%s",wo[i].name);
printf("部门:");
scanf("%s",wo[i].bm);

}
save(n+total);
}

void sort() /*根据职工号排序*/
{
int total,temp,i,j;
total=initial();
for(i=1;i<=total;i++)
for(j=1;j<=total-i;j++)
{if(wo[j].num>wo[j+1].num)
temp=wo[j].num;wo[j].num=wo[j+1].num;wo[j+1].num=temp;
}
printf("按职工号由小到大的顺序排序:\n");
for(i=1;i<=total;i++)
{
printf("%d %s %s \n",i,wo[i].name,wo[i].bm);
}
printf("\n");
}

void search() /*根据职工号查找*/
{
FILE*fp1;
int total,i;
long num1;
total=initial();
if ((fp1=fopen("wo_list.dat","r"))==NULL)
{
printf("Can not open file!\n");
return;
}
printf("请输入职工号:");

scanf("%ld",&num1);
printf("姓名\n");

for(i=0;i<=total;i++)
{
if(wo[i].num==num1)
printf("%s\n\n",wo[i].name);
}
fclose(fp1);
}

void output() /*打印已存入"wo_list.dat"的数据*/
{
int i,total;
FILE *fp1;
fp1=fopen("wo_list.dat","r");

total=initial();

printf("Total worker records: %4d\n\n\n",total);

printf(" 职工号 姓名 部门\n");

for(i=1;i<=total;i++)
{
if(fread(&wo[i],sizeof(struct worker),1,fp1)!=1)break;
printf(" %d %s %s ",wo[i].num,wo[i].name,wo[i].bm);

printf("\n");
}
fclose(fp1);
}

main()/*主菜单*/
{
int choice;
while(1)
{printf("1、输入职工信息\n");
printf("2、职工信息排序\n");
printf("3、职工信息查询\n");
printf("4、输出职工信息\n");
printf("5、退出\n");
printf("请输入你的选择: ");scanf("%d",&choice);
switch(choice)
{case 1: input();break;
case 2: sort(); break;
case 3:search();break;
case 4:output();break;
case 5:exit(0);break;
default :printf("输入错误,请重新输入!\n");
}
}
}
搜索更多相关主题的帖子: initial 
2006-01-02 15:43
tiandi2997
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2005-12-9
收藏
得分:0 
我也不是很清楚,但是我觉得在排序的时候,你交换的temp定义成数组的形式试试看

2006-01-03 18:07
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
struct worker /*声明结构体*/
{int num; //交换struct worker所有的成员
char name[10]; //而不是仅仅是wo[i].num
char bm[10];
}wo[20];

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2006-01-03 18:35
快速回复:[求助]我的程序为什么排序那部分不能用,谢谢
数据加载中...
 
   



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

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