C语言报数退圈问题程序纠错

有n个人围成一圈,顺序排号。从第1个人开始报数(从1~m报数),凡报到m的人退出圈子,依次输出退圈人原来的序号,每个数3个宽度,左对齐。
输入样例:
5
输出样例:
5 10 6 2 9 8 1 4 7 3
下头这个程序输出无数个0……
求纠错


#include 
#define N 10
void countout (int *p,int m);
int main(){
    int a[N]={0},m;
    scanf("%d",&m);
    countout(a,m);
    return 0;
}
void countout (int *p,int m)
{
    int i,k=1,n=0;
    for(i=1;i<=10;i++)
        *p=i;      //给10人赋值
    do{
        for(i=0;i<10;i++)
       {   if(*(p+i)!=0)
             continue;    //值为0报数次数不计,k不加1
           if(k%m==0)
             {printf("%-3d",*(p+i));
              *(p+i)=0;   //出圈后值为0
              n++; }
           else k++;    //报数次数
        }
      }while(n!=10);
}

15行,for循环一直都是给 *p赋值


void countout (int *p,int m)
{
    int i,k=1,n=0;
    for(i=0;i<10;i++)
        *(p+i)=1+i;
    do{
        for(i=0;i<10;i++)
       {   if(*(p+i)==0)
             continue;
           if(k%m==0)
             {printf("%-3d",*(p+i));
              *(p+i)=0;
              n++; }
              k++;
        }
      }while(n!=10);
}

俺改好了!