C语言定义了一个结构体,做数组的增删查,但是定义的length明明是0,一调用init就变成1

#include
#include
#include
#define MaxSize 100
#define SUCCESS 1
#define FAILED 0
#define OVERFLOW 1
typedef int status;
typedef int type;
typedef struct{
type *elem;
int length;
}SqList;
status init(SqList L);
status getElem(SqList L,int i,type &elem);
status selectElem(SqList L,type elem,int &location);
status insertElem(SqList &L,int location,type elem);
status delElem(SqList &L,int location);
int main(){
SqList L;
int operation;
int location;
type elem;
printf("------顺序表的操作------\n");
printf("------1、顺序表的初始化------\n");
printf("------2、顺序表的取值------\n");
printf("------3、顺序表的查找------\n");
printf("------4、顺序表的插入------\n");
printf("------5、顺序表的删除------\n");
printf("------6、退出------\n");
while(true){
printf("%d\n",operation);
printf("请输入操作:\n");
scanf("%d",&operation);
switch(operation){
case 1:if(init(L)==0)
printf("初始化失败\n");
else printf("初始化成功\n");
printf("%d",L.length);
break;
case 2:
printf("请输入要查找的位置:\n");
scanf("%d",&location);
if(getElem(L,location,elem)==1)
printf("第%d个位置上的值为:%d\n",location,elem);
break;
case 3:printf("请输入要查找的值:\n");
scanf("%d\n",&elem);
if(selectElem(L,elem,location)==1)
printf("%的位置在%个",elem,location);
break;
case 4:
printf("请输入要插入的位置以及值:\n");
scanf("%d%d",&location,&elem);
if(insertElem(L,location,elem)==1)
printf("插入成功\n");
break;
case 5:
printf("请输入要删除的值的位置:\n");
scanf("%d",&location);
if(delElem(L,location)==1)
printf("删除成功\n");
break;
}

}
return 0;
}
status init(SqList L){//初始化
L.elem=new type[MaxSize];
if(!L.elem){
exit(OVERFLOW);
}
L.length=0;
L.elem[0]=2;
return SUCCESS;
}
status getElem(SqList L,int location,type &elem){//获取元素 location要查找的位置 elem返回查找到的值
if(location>L.length||location<1){
printf("超出查找范围\n");
return FAILED;
}
else{
elem=L.elem[location];
return SUCCESS;
}
}
status selectElem(SqList L,type elem,int &location){//查找元素 elem要查找的元素 location查找元素的位置
for(int i=0;i<L.length-1;i++) {
if(L.elem[i]==elem)
location=i+1;
return SUCCESS;
}
printf("没有找到你要找的值\n");
return FAILED;

}
status insertElem(SqList &L,int location,type elem){//插入元素
if(locationL.length+1||location==MaxSize){
printf("插入的位置超出范围\n");
return FAILED;
}
if(L.length==0){
L.elem[0]=elem;
L.length++;
return SUCCESS;
}
for(int i=L.length-1;i>location;i--){
L.elem[i+1]=L.elem[i];
L.elem[location-1]=elem;
}
L.length++;
printf("%d",L.length);
return SUCCESS;
}
status delElem(SqList &L,int location){//删除元素
if(locationL.length){
printf("删除元素的位置超出范围\n");
return FAILED;

}
for(int i=location-1;i<L.length-1;i++){
L.elem[i]=L.elem[i+1];
L.length--;
return SUCCESS;
}
}

c

3个回答

建议你用debug模式监视该结构体的某个实例,初始化没有错的话,看看是什么时候变成1的

status init()函数是对类的初始化,在你的这个程序中数据初始长度为1,所以一调用init()函数时就会把length初始化为1.

个人认为是这样的:status init()是一个返回整型值的函数(因为你前面有一个typedef int status定义)。L.length=0;是的,你将长度设为0了,没错。
L.elem[0]=2; 这句,把2赋给了数组的第一个元素,也没错。
return SUCCESS;前面有一个定义,#define SUCCESS 1,就是说,前面两句话做成功了,函数返回一个整型的值,1。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐