请问这个程序有啥问题啊? 我一度怀疑编译器有bug; del函数最后加break时 输入 1 输出 21 ;把break注释掉输入 1 输出 20 就很奇怪啊!

#include<stdio.h>
#include<math.h>

int del(int *p,int m,int n);

int main()
{
    int m;
    while (1)
    {
        scanf("%d",&m);
        int a[50]={0};
        if(m<20&&m>0)
        {
            printf("%d\n",del(a,m,20));
        }
    }
    
    return 0;
}

int del(int *p,int m,int n)
{
    int x=0,k=0,i;
    for( i=0;i<n;i++)
    *(p+i)=1;
    while (x<n-1)
    {
        for( i=0;i<n;i++)
        {
            
            if(*(p+i)==1)
            {
                k++;
                if(k==m)
                {
                    x++;
                    *(p+i)=0;
                    k=0;
                }
            }
        }
       

    }
    for( i=0;i<n;i++)
        if(*(p+i)!=0)
        break;
       
    return i+1;

}

没问题啊
你一开始把数组元素全都设置为0了,所以循环20次,当i=20时跳出for循环,此时i+1=21被返回
注释掉break的时候,你的return就进入if了,因为最后一个for循环的if一直没有生效,所以返回的是寄存器中的某个特定值,这里因为一直在运算i,所以最后返回的是20