鱼C论坛

 找回密码
 立即注册
查看: 1759|回复: 2

各位大哥大姐,帮兄弟看看这个程序,Find函数为什么是乱码?

[复制链接]
发表于 2013-12-13 22:38:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define MAXLEN 20
typedef struct
{
  int num;
  char name[MAXLEN];
  int socre;
  int classes;
}ElemType;
typedef struct
{
ElemType *elem;
int last;
int listsize;
}SqList;
ListInit(SqList *L)
{
L->elem=(ElemType *)malloc(sizeof(ElemType));
L->last=0;
L->listsize=MAXSIZE;
return OK;
}

void ReadIn(ElemType *e)
{
printf("输入学号:");
scanf("%d",&e->num);
printf("输入姓名:");
scanf("%s",e->name);
printf("输入成绩:");
scanf("%d",&e->socre);
printf("输入年级:");
scanf("%d",&e->classes);
}
ListInsert(SqList *L,int pos,ElemType e)
{
ElemType *p,*q;
if(pos<1||pos>L->last+1)
return ERROR;
p=&L->elem[L->last];
q=&L->elem[pos-1];
for(;p>=q;--p)
*(p+1)=*p;
*q=e;
++L->last;
return OK;
}

void Print(SqList L)
{
int i;
for(i=0;i<L.last;++i)                    
{
printf("学号:%d\t",L.elem[i].num);
printf("姓名:%s\t",L.elem[i].name);
printf("成绩:%d\t",L.elem[i].socre);
printf("年级:%d\t",L.elem[i].classes);
printf("\n");
}
}
void Sort(SqList *L  )
{
int i,j;
ElemType t;
for(i=0;i<L->last-1;++i)
for(j=0;j<L->last-i-1;++j)
if(L->elem[j].socre>L->elem[j+1].socre)
{
t=L->elem[j];
L->elem[j]=L->elem[j+1];
L->elem[j+1]=t;
}
int a;
for(a=0;a<L->last;++a)                    
{
printf("学号:%d\t",L->elem[a].num);
printf("姓名:%s\t",L->elem[a].name);
printf("成绩:%d\t",L->elem[a].socre);
printf("年级:%d\t",L->elem[a].classes);
printf("\n");
}
}
void Find(SqList L ,int b)
{

  int i=0;
while((i<=L.last)&&(L.elem[i].num)!=b );
  i++;
if(i<=L.last)
  {
printf("学号:%d\t",L.elem[i].num);
printf("姓名:%s\t",L.elem[i].name);
printf("成绩:%d\t",L.elem[i].socre);
printf("年级:%d\t",L.elem[i].classes);
printf("\n");
}
else
  printf("无该同学");

}

void main()
{
SqList L;
int key,len;
int b;
char a;
ElemType e;
ListInit(&L);
  printf("********************************学生管理系统***********************************\n");
  printf("是否进入学生管理系统?(Y/N): \n");
a=getchar();
if(a=='Y'||a=='y')
{
   do{
printf("∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞\n");
printf("********************************(1):输入成绩***********************************\n");
printf("\n");
printf("********************************(2):成绩排序***********************************\n");
printf("\n");
printf("********************************(3):显示所有成绩*******************************\n");
printf("\n");
  printf("*******************************(4):按学号查找学生*****************************\n");
printf("\n");
printf("********************************(5):退出***************************************\n");
printf("\n");
printf("∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞\n");
printf("\n");
scanf("%d",&key);
switch(key)
{
case 1 :ReadIn(&e);
len=L.last;
ListInsert(&L,++len,e);
break;
case 2 :Sort(&L);break;
case 3 :Print(L);break;
case 4 :
  printf("请输入你想查找的学生学号:");
  scanf("%d",&b);
     Find(L,b);
     break;
case 5:exit(0);
default:printf("Error\n");break;
}
}while(1);
}
else
  printf("不能进入学生管理系统!\n");
  system("pause");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-16 23:04:53 | 显示全部楼层
void Find(SqList L ,int b)
{
      
      int i=0;
      while((i<=L.last)&&(L.elem.num)!=b );
      i++;
      if(i<=L.last)
      {
            printf("学号:%d\t",L.elem[i-1].num);//此处改为i-1打印的正确,你看看是什么问题呢
            printf("姓名:%s\t",L.elem[i-1].name);
            printf("成绩:%d\t",L.elem[i-1].socre);
            printf("年级:%d\t",L.elem[i-1].classes);
            printf("\n");
      }
      else
            printf("无该同学");
      
}
还有一点,不能查询第二次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-16 23:06:25 | 显示全部楼层
find打印乱码是因为L.elem[i].num里面不是正确的值,我将i-1,输出正确,你试试!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 03:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表