数据结构静态查找关键字 为什么输入表元素会出错。。。求高手
# include<stdio.h>
# define elemtype int
typedef struct
{
elemtype *elem;
int length;
}table;
void main()
{
int i,j;table a;int key;
printf("请输入有序表长度:");
scanf("%d",&a.length);
printf("请输入有序表的元素:\n");
for(i=1;i<=a.length;i++)
scanf("%d",&a.elem[i]);
printf("请输入关键字:");
scanf("%d ",&key);
a.elem[0]=key;
for(j=a.length;(a.elem[j]!=a.elem[0])&&j>0;j--)
{
}
if(j==0)
printf("查找不成功!");
else
printf("是第%d个元素",j);
}
[解决办法]
for(i=1;i<=a.length;i++)
scanf("%d",&a.elem[i]);//你的elem[i]在哪呢?没有分配内存的指针就直接使用会crash
[解决办法]
a.elem[i]压根就没有空间、数据怎么存储?从这个看来,你数组和指针没有分清楚、4楼的答案很好,但是申请空间后没有释放,会造成内存泄漏,所以配合4楼的程序代码为:
# include<stdio.h>
#include <malloc.h>
# define elemtype int
typedef struct
{
elemtype *elem;
int length;
}table;
void main()
{
int i,j;
table a;
int key;
printf("请输入有序表长度:");
scanf("%d",&a.length);
a.elem=(int*)malloc((a.length+1)*sizeof(int));//分配空间
printf("请输入有序表的元素:\n");
for(i=1;i<=a.length;i++)
{
scanf("%d",&a.elem[i]); //为了便于你理解,这里可以为:scanf("%d",a.elem+i);
}
printf("请输入关键字:");
scanf("%d",&key);//被你坑死了,这个地方你在%d后面打了个空格,我以为是我程序改得有问题,一直找到现在...
a.elem[0]=key;
printf("开始查找:\n");
for(j=a.length;j>0;j--)
{
if(a.elem[j]==a.elem[0])
break;
}
free(a.elem); //释放资源
a.elem=NULL; //指针置空,以防野指针。
if(j==0)
printf("查找不成功!");
else
printf("是第%d个元素",j);
}