回 帖 发 新 帖 刷新版面

主题:帮忙改一下“排序”

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

#define N 10 /* 最大学生人数,实际请更改*/ 

struct student 

char code[21]; /* 学号 */ 
char name[21]; /* 姓名 */ 
int age;          /* 年龄 */
char sex[3];      /* 性别 */
char time[21]; /* 出生年月 */ 
char add[30];     /* 家庭地址 */
char tel[21];  /* 电话号码 */
char mail[30];    /* 电子邮件地址 */
}stu[N]; 
int k=1,n; /* 定义全局变量 */

void input();/* 函数声明 */ 
void seek(); 
void del(); 
void display();   
void menu();
void sorting()

void  main() 
{ while(k) 
  menu(); 


 
/* 建立学生信息 */ 
void input()

FILE *fp; 
int i=0; 
if ((fp=fopen("学生信息","r"))==NULL) 
{ printf("cannot open file\n"); 
exit(0); 

while(fscanf(fp,"%s %s%d%s %s %s %s %s",stu[i].code,stu[i].name,&stu[i].age, 
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8) 
{
   i++;
}
fclose(fp); 
n=i; 
printf("录入完毕!\n"); 


/*查询学生信息*/
void seek() 
{int i,item,flag; 
char s1[21]; 
printf("------------------\n"); 
printf("1.按学号查询\n"); 
printf("2.按姓名查询\n"); 
printf("3.退出本菜单\n"); 
printf("------------------\n"); 
while(1) 
{ printf("请选择子菜单编号:"); 
scanf("%d",&item); 
flag=0; 
switch(item) 

case 1: 
printf("请输入要查询的学生的学号:\n"); 
scanf("%s",&s1); 
for(i=0;i<N;i++) 
if(strcmp(stu[i].code,s1)==0) 
{ flag=1; 
printf("该学生学号,姓名,年龄,性别,出生年月,地址,电话,E-mail 分别为:\n"); 
printf("%s %s %d %s %s %s %s %s\n",stu[i].code,stu[i].name,stu[i].age, 
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); 

if(flag==0) 
printf("该学号不存在!\n"); break; 
case 2: 
printf("请输入要查询的学生的姓名:\n"); 
scanf("%s",&s1); 
for(i=0;i<N;i++) 
if(strcmp(stu[i].name,s1)==0) 
{ flag=1; 
printf("该学生学号,姓名,年龄,性别,出生年月,地址,电话,E-mail 分别为:\n"); 
printf("%s %s %d %s %s %s %s %s\n",stu[i].code,stu[i].name,stu[i].age, 
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); 

if(flag==0) 
printf("该姓名不存在!\n"); break; 
case 3:return; 
default:printf("请在1-3之间选择\n"); 






/*删除学生信息*/
void del() 
{ int i,j,flag=0; 
char s1[21]; 
printf("请输入要删除学生的学号:\n"); 
scanf("%s",&s1); 
for(i=0;i<N;i++) 
if(strcmp(stu[i].code,s1)==0) 
{ flag=1; 
for(j=i;j<N-1;j++) 
stu[j]=stu[j+1]; 

if(flag==0) 
printf("该学号不存在!\n"); 
if(flag==1) 
{ printf("删除成功,显示结果请选择菜单4\n"); 
n--; 




/*显示当前学生信息*/
void display() 
{ int i; 
printf("所有学生的信息为:\n"); 
for(i=0;i<n;i++) 

printf("%s %s %d %s %s %s %s %s\n",stu[i].code,stu[i].name,stu[i].age, 
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); 

}
/*排序*/
void  sorting()
{
  int j,i,t;
  for(j=0;j<9;j++)
    for(i=0;i<9-j;i++)
      if(stu[i].code>stu[i+1].code)
         {
            t=stu[i];
            stu[i]=stu[i+1];
            stu[i+1]=t;
         }
    printf("the sorted numbers :\n");
      for(i=0;i<10;i++)
       printf("%d",stu[i]);
   printf("\n");
}

void menu()/* 界面 */ 
{ int choose; 
printf("*****系统功能菜单*****\n"); 
printf("----------------------\n"); 
printf("1.读入学生信息\n"); 
printf("2.查询学生信息\n"); 
printf("3.按学号删除信息\n");
printf("4.显示当前信息\n"); 
printf("5.排序\n"); 
printf("6.退出系统\n"); 
printf("----------------------\n"); 
printf("请选择菜单编号:"); 
scanf("%d",&choose);
switch(choose) 

case 1:input();break; 
case 2:seek();break;  
case 3:del();break;
case 4:display();break;
case 5:sorting();break;    
case 6:k=0;break; 
default:printf("请在1-6之间选择\n"); 
}
}

回复列表 (共7个回复)

沙发

int型的t怎么能用做结构体类型交换的临时变量呢?把t改成struct student类型至少能通过编译

板凳


确切的怎么改,我这个学期刚学的C、、不明白,纠结中[em10]

3 楼

int j,i,t;
这里改成
int j,i;
struct student t;
算法毕竟是个套路,要活学活用

4 楼


/*按学号排序*/
void sort()
{
    int j,i;
    struct student t;
        for(j=0;j<9;j++)
            for(i=0;i<9-j;i++)
                if(strcmp(stu[i].code,stu[i+1].code)>0)
                {
                    t=stu[i];
                    stu[i]=stu[i+1];
                    stu[i+1]=stu[i];
                }
                for(i=0;i<10;i++) 
                { 
                      printf("%s %s %d %s %s %s %s %s\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); 
                } 
        printf("\n");
}

Linking...
Cpp1.obj : error LNK2001: unresolved external symbol "void __cdecl sorting(void)" (?sorting@@YAXXZ)
Debug/Cpp1.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

Cpp1.exe - 2 error(s), 0 warning(s)
帮忙一下

5 楼

void sorting()声明的时候后面少了分号

6 楼

void sorting()函数后面少了一个分号,而且sort()函数里面的代码也有问题
                      t=stu[i];
                    stu[i]=stu[i+1];
                    stu[i+1]=stu[i];
应该改为
                      t=stu[i];
                    stu[i]=stu[i+1];
                    stu[i+1]=t;

7 楼

main前面的void改了吧……这个问题怎么这么普遍?

我来回复

您尚未登录,请登录后再回复。点此登录或注册