问题遇到的现象和发生背景 :
数据结构进行数据的插入和删除,但是在数据进行插入删除后进行输出的时候,用全局变量进行输出,输出失败。然后调试了一下发现在插入和删除的函数里面给全局变量赋值的时候,那行代码没有执行,是直接跳过的这个是怎么回事。具体代码如下:
问题相关代码,请勿粘贴截图
//用全局变量实现数据传递函数插入
#include"stdio.h"
#include"stdlib.h"
#define MAXSIZE 20
#define OK 1
#define ERROR 0
typedef struct Linear_list
{
int elem[MAXSIZE];
int last;//最后一个元素的位置也就是数组下标
}SeqList;
SeqList L_P;
//插入函数
int insertList(SeqList* Lp, int i, int x)
{
int j;
if (Lp->last == MAXSIZE - 1)
{
printf("表满");
return(ERROR);
}
if (i<1 || i>Lp->last + 2)
{
printf("插入位置错误");
return(ERROR);
}
for (j = Lp->last;j >= i - 1;j--)
Lp->elem[j + 1] = Lp->elem[j];
Lp->elem[i - 1] = x;
Lp->last++;
return(OK);
L_P=*Lp;
/*这里使用全局变量进行赋值*/
}
//顺序表输出函数
void input(SeqList L)
{
int j;
for(j=0;j<L.last;j++)
{
printf(" %d",L.elem[j]);
}
printf("\n");
}
// 删除函数
int DeleteList(SeqList *Lp, int i)
{
int j;
if(i<1||i>Lp->last+1)
{
printf("删除位置错误,不存在第%d个位置,原样输出\n",i);
return 0;
}
for(j=i;j<=Lp->last;j++)
{
Lp->elem[j-1]=Lp->elem[j];
}
Lp->last--;
return 1;
//这里又要进行地址传递要不然不能输出
L_P=*Lp;
}
// 主函数开始
void main()
{
SeqList L;
int i,j,x;
printf("请求输入顺序表中元素的个数:\n");
scanf("%d",&L.last);
printf("请输入顺序表中的各个元素:\n");
for(j=0;j<L.last;j++)
{
scanf("%d",&L.elem[j]);
}
//对输入的顺序表进行输出
input(L);
printf("\n请输入想要插入的元素:");
scanf("%d",&x);
printf("请输入要插入的元素的位置:");
scanf("%d",&i);
insertList(&L, i, x);/*这里的L在上面是结构体类型,但是插入函数需要指针类型,所以用&进行转化*/
// 对插入后的顺序表进行输出
printf("插入后元素进行输出:");
input(L_P);/*这里其实可以返回参数用参数进行传递输出*/
printf("请输入要删除的元素的位置:");
scanf("%d",&i);
DeleteList(&L,i);//对函数进行删除操作
printf("删除后顺序表为:");
input(L_P);
}
运行结果及报错内容
我的解答思路和尝试过的方法
我以为是我编译系统的问题,然后试了另一个代码如下结果显示是成功的。
代码:
//用全局变量实现数据传递函数插入
#include"stdio.h"
int SLP=0;//全局结构体变量
int out(int x,int y)
{
int z;
z=x+y;
SLP=3;
return(z);
}
void main()
{
int x,y;
x=1,y=2;
printf("%d",out(x,y));
printf("%d",SLP);
}
结果如下: