T T来个大神帮我改一下吧……
function吧
全部回复
仅看楼主
level 1
thermeter 楼主
#define MAX 100   
#include<stdio.h>   
#include<string.h>
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))  
#define COMPARE(x,y) ((x)<(y)?-1:(x)==(y)?0:1)
struct student   
{   
char Sname[20];   
int Snumber;  
int Sroom;   
};  
int n;
/*姓名排序*/  
void Name_Sort(struct student stu[],int n)   
{
int num=n;   
int i,j;   
char Name[20];   
struct student temp;
for(i=0;i<num;i++){   
   strcpy(Name,stu[i].Sname);   
   for(j=i+1;j<num;j++)    {   
    if(strcmp(stu[j].Sname,Name)>0){
     strcpy(Name,stu[j].Sname);
     SWAP(stu[i],stu[j],temp);
    }   
   }     
}   
}
/*按姓名输出*/
void Name_Prin(struct student stu[])   
{
int i;
for(i=0;i<n;i++)
   printf("%s\t%s\t%d\n",stu[i].Sname,stu[i].Snumber,stu[i].Sroom);   
}  
   
/*按姓名查找*/
int Name_Search(struct student stu[],char Name[],int n)   
{   
int left, right, mid;   
left=0;   
right=n-1;   
while(left<=right){   
   mid=(left+right)/2;
   switch(COMPARE(stu[mid].Sname,Name)){
   case -1:
    left=mid+1;
    break;
   case 0:
    return mid;
   case 1:
    right=mid+1;
    break;
   }
}  
return 0;  
}   
   
/*学号排序*/   
  
void Number_Sort(struct student stu[],int n)   
{
int num=n;   
int i,j;   
int number;
struct student temp;
for(i=0;i<num;i++){   
   number=stu[i].Snumber;   
   for(j=1;j<num-i;j++){  
    if(stu[j].Snumber>number){
     number=stu[j].Snumber;
     SWAP(stu[i],stu[j],temp);
    }   
   }
}
}
/*按学号输出*/
void Number_Prin(struct student stu[])   
{   
int i;
for(i=0;i<n;i++)   
   printf("%s\t%d\t%d\n",stu[i].Sname,stu[i].Snumber,stu[i].Sroom);   
}   
/*按学号查找*/
int Number_Search(struct student stu[],int Number,int n)   

2010年01月26日 03点01分 1
level 1
thermeter 楼主
{  
int left, right, mid;    
left=0;
right=n-1;   
while(left<=right){   
   mid=(left+right)/2;   
   switch(COMPARE(stu[mid].Snumber,Number)){
   case -1:
    left=mid+1;
    break;
   case 0:
    return mid;
   case 1:
    right=mid+1;
    break;
   }
}
return 0;
}
/*宿舍号排序*/
void Room_Sort(struct student stu[],int n)   
{
int num=n;   
int i,j;       
int room;
struct student temp;
for(i=0;i<num;i++){
   room=stu[i].Sroom;   
   for(j=1;j<num-i;j++){   
    if(stu[j].Sroom>room){
     room=stu[j].Sroom;
     SWAP(stu[i],stu[j],temp);
    }
   }  
}   
}  
/*按宿舍号输出*/
  
void Room_Prin(struct student stu[])   
{   
int i;
for(i=0;i<n;i++)   
   printf("%s\t%d\t%d\n",stu[i].Sname,stu[i].Snumber,stu[i].Sroom);  
}   
   
/*按宿舍号查找*/
int Room_Search(struct student stu[],int Room,int n)   
{   
int left,right,mid;
left=0;   
right=n-1;   
while(left<=right)   
{   
   mid=(left+right)/2;    
   switch(COMPARE(stu[mid].Sroom,Room)){
   case -1:
    left=mid+1;
    break;
   case 0:
    return mid;
   case 1:
    right=mid+1;
    break;
   }
}
return 0;
}   
   
void main()   
{   
int i,j=1,k,t;   
struct student stu[MAX];
struct student p;
printf("\t\t\t学生宿舍管理小程序\n");   
printf("\n");   
printf("请先输入学生人数:");   
scanf("%d",&n);   
for(i=0;i<n;i++){
   printf("姓名:");   
   scanf("%s",stu[i].Sname);   
   printf("学号:");   
   scanf("%d",&stu[i].Snumber);   
   printf("宿舍号:");   
   scanf("%d",&stu[i].Sroom);   
   printf("\n");   
}   
while(j){
   printf("\t\t******************************\n");   
   printf("\t\t\t1      按姓名查找\n");   

2010年01月26日 03点01分 2
level 1
thermeter 楼主
   printf("\t\t\t2      按学号查找\n");   
   printf("\t\t\t3      按宿舍号查找\n");   
   printf("\t\t\t0      退出\n");   
   printf("\t\t******************************\n");   
   printf("\n");   
   printf("输入相应的序号进行相应的操作");    
   scanf("%d",&k);
   switch(k){
   case 1 :
    Name_Sort(stu,n);   
    Name_Prin(stu);   
    printf("请输入想要查找的同学姓名:\n");   
    while(getchar()!='\n');   
    gets(p.Sname);   
    t=Name_Search(stu,p.Sname,n);
    if(t)
     printf("%s\t%d\t%d\n",stu[t].Sname,stu[t].Snumber,stu[t].Sroom);
    break;
   case 2 :
    Number_Sort(stu,n);  
    Number_Prin(stu);   
    printf("请输入学生学号:");   
    while(getchar()!='\n');
    scanf("%d",&p.Snumber);
    t=Number_Search(stu,p.Snumber,n);  
    if(t)
     printf("%s\t%d\t%d\n",stu[t].Sname,stu[t].Snumber,stu[t].Sroom);
    break;
   case 3 :
    Room_Sort(stu,n);     
    Room_Prin(stu);   
    printf("输入宿舍号:");
    while(getchar()!='\n');
    scanf("%d",&p.Sroom);   
    t=Room_Search(stu,p.Sroom,n);
    if(t)
     printf("%s\t%d\t%d\n",stu[t].Sname,stu[t].Snumber,stu[t].Sroom);
    break;
   case 0: j=0;
   }
}  
}
为什么编译成功,但是调试的时候用姓名查找就不能成功了,来个大神帮我改下吧
2010年01月26日 03点01分 3
1