#include <stdio.h>
#include <malloc.h>
int Query(int s,int Num,struct cc ** pArr)
{
int min = 0;
int max = Num-1;
int mid = (min+max)/2;
while(s!=pArr[mid].ID)
{
if(s>pArr[mid].ID)
{
min = mid;
mid = (min+max)/2;
}
else if(s<pArr[mid].ID)
{
max = mid;
mid = (min+max)/2;
}
if(mid==min)
break;
}
if(s==pArr[mid].ID)
return mid;
else if(s==pArr[max].ID)
return max;
else
printf("没有找到这个职工编号");
}
struct Worker
{
char Name[20];//职工名称
int ID;//职工号
};
//主函数,实现职工的姓名和编号的排序
int main (void)
{
int i, j;
struct Worker w;//结构体变量w用来替换
int Num;//Num为职工个数
printf("请输入职工的个数!\n");
printf("职工个数:");
scanf("%d", &Num);//将键盘上输入的职工个数赋给Num
struct Worker * pArr;//定义一个结构体类型的指针变量pArr
//定义一个动态的一维数组,实现员工的名称和编号的录入
pArr = (struct Worker *)malloc(Num * sizeof(struct Worker));
for(i=0; i<Num; ++i)
{
printf("请输入第%d个员工的信息!\n", i+1);
printf("职工姓名:");
scanf("%s", pArr[i].Name);
printf("职工号:");
scanf("%d", &pArr[i].ID);
printf("\n\n");
}
//用冒泡排序法实现排序
for(i=0; i<Num-1; i++)
{
for(j=0; j<Num-1-i; j++)
{
//比ID后,互换,大职工号向后移
if(pArr[j].ID > pArr[j+1].ID)
{
w = pArr[j];
pArr[j] = pArr[j+1];
pArr[j+1] = w;
}
}
}
//输出职工姓名和编号
printf("排序后的职工信息为:\n");
for(i=0; i<Num; i++)
{
// printf("第%d个职工的信息为:\n", i+1);
printf("姓名:%s ", pArr[i].Name);
printf("编号:%d\n", pArr[i].ID);
}
printf("请输入您要查找的职工号,按Enter键确认:");
int s;
int n;
scanf("%d\n",&s);
n = Query(s,Num,pArr);
printf("您要查找的职工姓名为:%s\n",pArr[s].Name);
return 0;
}
不对,我已经试过了
'struct Worker *' : unknown size提示这个
你怎么试的?这样一定行
函数定义:int Query(int s,int Num,struct Worker* pArr) ;
调用:struct Worker * pArr ;
.......
n = Query(s,Num,pArr);
好吧,这个是编译问题,你把这个结构的定义放到这个函数之前应该就可以了
追问恩, 你是对的。问题已经解决了,抱歉,虽然没有采纳你 但真心的感谢你的回答
问题是我主函数如何把pArr传递给Query这个函数?用什么类型来接收啊 ?
我主函数里面是这么定义的:struct Worker * pArr;//定义一个结构体类型的指针变量pArr