N个人报数问题c语言

假设有n个人(0<n<20),每个人分配一个序号,现在从编号为一的人开始报数,报到m的人出列,剩下的人依旧围成一圈,直到所有人出列。
我的编码错在哪呢?想不太明白,感觉没有什么问题,请各位神仙指点一二


#include
int main()
{
    int a=0,i=1,k=0;
    int n,m;
    int b[10000];
    scanf("%d%d",&n,&m);
    if(n<=0||n>=20||m<=0||m>=20)
    {
        printf("ERROR");
    }
    else
    {
        for(i=1;i<=n;i++)
        {
            b[i]=i;
        }
        while(1)
        {
            a++;
                if(a==m)
            {
                k++;
                if(b[i]>0)
                {
                    printf("\t%d",b[i]);
                    b[i]=0;
       a=0;
                }
                if(k==n)
                {
                    break;
                }
            }
            i=(i+1)%n;
        }
    }
    return 0;
}