C语言,n个人围成一圈,从一开始报数,到某一位退出,求剩下的是谁。错在哪了,求解

#include
int main()
{
void gaid(int number1,int number2);
int n,m;
printf("请输入参与游戏人数:\n");
scanf("%d",&n);
printf("请输入每次游戏第几人被淘汰出局:\n");
scanf("%d",&m);

gaid(n,m);
return 0;
}

void gaid(int number1,int number2)
{
int arr[number1],*p=arr,i,flage=0,sum=0;
for(i=0;i<number1;i++) //给数组依次写入从1开始的数
{
arr[i]=i+1;
}
while(number1!=1)
{
while(flage<number2)
{

        if(p==&arr[number1])   //当指针指到数组最后一个时把指针指回数组首位置 
        {
            p=&arr[0];
        }
        if(*p!=0)         //这个指针所指的值不为零时计数器加一位 
        {
            flage++;
        }
        if(flage<number2)    //当达到要被踢的位置时,指针不向下一位移动 
        {
            p++;
        }
    }
    if(flage==number2)      //当达到要被踢的位置时,计数器重新清零,指针所指值变为零 
    {
    flage=0;
    *p=0;
    number1-=1;
    }

}
for(i=0;i<number1;i++)     //循环完毕后,把数组中所有值之和加起来,其和就是原 游戏者的序号 
{
    sum+=arr[i];
}
printf("%d",sum);

}

if(p==&arr[number1]) 最后一个是ar[number1-1]呀,这里错了

#include

int M = 3; //报到3的人就退出

int main()
{
int n, s = 0; //n为参赛人数
scanf("%d", &n);
for (int i = 2; i <= n; ++i)
s = (s+M)%i;
printf("%d\n", s+1); //打印出最后留下的人
return 0;
}

应该通过调试来处理,也能提高你的调试能力