C语言静态数组先增加一组数据再删除一组数据,但是增加完以后删除时,会把新增的也删除掉

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Cate
{
    int No;
    char Name[30];
};
int main() {
    struct Cate ca[10] =
    {
        {1,"Starter"},
        {2,"Curries"},
        {3,"Barbecues"}
    };
    char str[100] = { 0 };
    int i = 3;
    int n;
    do {
        printf("Input:");
        scanf("%s", str);
        strcpy(ca[i].Name, str);
        ca[i].No = i + 1;    
        printf("%s\n", ca[i].Name); 
        printf("%d\n", ca[i].No); 
        i++;
        printf("Enter n:");
        scanf("%d", &n);  
    } while (n == 1);
    int j = 0;
    for (j = 0; j < i; j++)
    {
        printf("%d\t%s\n", ca[j].No, ca[j].Name);
    }
    printf("Input:");
    int M;
    scanf("%d", &M);
    if(M==1)//我想删除第一组数据,如果M=1,就删掉
    {
        for(int k=0;k<i;k++)
        {
            if(ca[k].No=M)
            {
                ca[k]=ca[k+1];
                i--;
            }
        }
        for (j = 0; j < i; j++)
        {
            printf("%d\t%s\n", ca[j].No, ca[j].Name);
        }
    }
    else
    {
        printf("qqq");
        for (j = 0; j < i; j++)
        {
            printf("%d\t%s\n", ca[j].No, ca[j].Name);
        }
    }
    return 0;
}

img