为什么删除的时候会减一 输出的时候z会变


#include <iostream>

using namespace std;
#define MAXLEN 30//数组最大值
typedef char Datatype;
typedef struct
{
    Datatype data[MAXLEN];//存放字母表的数组
    int length;//定义长度
}Seqlist;//字母表
Seqlist alphabet;

void Init(Seqlist *alphabet)//初始化,将线性表的指针传入
{
    alphabet->length=0;//将长度置为0
}

void Creat(Seqlist *alphabet,char n)//创建字母表函数,输入字母
{
    int i;
    printf("请输入26个字母");
    for(i=0;i<26;i++)
    {
        scanf("%c",&alphabet->data[i]);//将输入的字母存入数组
        alphabet->length++;//更新长度
        if(i==26) 
        break;   
    }
}

int Insert(Seqlist *alphabet,int i,Datatype x)//插入函数,插入位置i,插入字母x
{
    int j;
    if(alphabet->length>=MAXLEN)//判断当前长度是否超过最大长度
    {
        printf("顺序表已满");
        return -1;
    }
    if(i<1 || i>alphabet->length+1)
    {
        printf("插入位置有误");
        return 0;
    }
    if (i == alphabet->length+1)
    {
        alphabet->data[i-1]=x;
        alphabet->length++;
        return 1;
    }
    else
    {
        int j;
        for(j=i;j<=alphabet->length;j++){
            alphabet->data[j-1]=alphabet->data[j];
        }
    alphabet->length--; 
    }
}

int Delete(Seqlist *alphabet,int i)//删除函数,删除位置i
{
    int j;
    if(alphabet->length==0)//表为空 没有元素可以删除
    {
        printf("表为空");
        return 0;
    }
    if(i<1 || i>alphabet->length+1)
    {
        printf("删除位置有误");
        return 0;
    }
    else
    {
        for(j=i;j<alphabet->length;j++)//从第i个位置开始往前挪
        {
            alphabet->data[j-1]=alphabet->data[j];//将元素往前挪一个位置
        }
        alphabet->length--;//长度减一
        return 1;
    }
}
void Display(Seqlist *alphabet)//显示字母表
{
    for(int i=0;i<=alphabet->length;i++)
    {
        printf("%c",alphabet->data[i]);
    }
    printf("\n");
}



int main(){
    int i,k;
    Datatype x;
    int temp = 1;
    Seqlist alphabet;
    Init(&alphabet);
    int choice;
    //s = Make();
    while(temp)
    {
        printf("======字母表操作演示=======\n");
        printf("1. 创建字母表\n");
        printf("2. 向指定位置插入指定数据\n");//插入
        printf("3. 删除顺序表指定位置的数据\n");//删除
        printf("4. 输出字母表\n");//输出
        printf("===========================\n");
        printf("\n输入1-4,选择所需功能号:");
        scanf("%d", &choice);
        printf("\n您选择的功能号为:%d\n", choice);

        switch(choice)
        {
            case 1://创建与输入
                Init(&alphabet);
                Creat(&alphabet,x);
                printf("当前字母表为:");
                Display(&alphabet);
                system("pause");
                getchar();
                break;

            case 2://在指定位置插入
                printf("请输入要插入的位置:");
                scanf("%d",&i);
                printf("请输入要插入的元素:\n");
                scanf("%c",&x);
                Insert(&alphabet,i,x);
                printf("成功插入元素\n");
                /*
                if(Insert(&alphabet,i,x))
                {
                    printf("成功插入元素\n");
                }
                */
                system("pause");
                break;

            case 3://删除指定位置的字母
                printf("请输入要删除元素的位置");
                scanf("%d",&i);//输入位置
                if(Delete(&alphabet,i))//传入线性表,输入位置
                {
                    printf("删除成功,当前字母表为:\n");
                    Display(&alphabet);
                }
                else
                    printf("\n输入删除的参数错误");\
                system("pause");
                break;

            case 4://输出字母表
                Display(&alphabet);
                break;




        }
    }



    return 0;
}








img

if(i==26)
break;
这是垃圾代码啊。怎么可能执行到呢

for(j=i;jlength;j++)//从第i个位置开始往前挪
{
alphabet->data[j-1]=alphabet->data[j];//将元素往前挪一个位置
改为:
for(j=i;jlength-1;j++)//从第i个位置开始往前挪
{
alphabet->data[j]=alphabet->data[j+1];//将元素往前挪一个位置