调用自定义函数出现问题

问题遇到的现象和发生背景

在写判断一个区间中回文素数的个数。但是调用函数后发现不对函数单个测试都可以一旦判断就不行。就想加入printf单独看一下函数的输出值。结果发现最后得到的结果发生了改变

问题相关代码,请勿粘贴截图
#include<stdio.h>
int huiwen(int n)
{
    if(n==0)
    {
    return 1;
}
else{
    int y=n,s;
    while(n!=0)
   {
    s=s*10+n%10;
    n=n/10; 
}
if(s==y)
return 1;
else
return 0;
}}   

int prime(int n)
{
    int s;
    if(n<=1)
    return 0;
    for(s=2;s*s<=n;s++)
    {
        if(n%s==0)
        break;
    }

        if(s*s<=n)
        return 0;
        return 1;
}

    
    int main()
    {
        int l,r,i,p,q;
        while(scanf("%d%d",&l,&r)!=EOF)
        {
        for( ;l<=r;l++)
        {
            p=huiwen(l);
            q=prime(l);
            if(p==1&&q==1)
            {
                i++;
            }
        }
        printf("%d\n",i);
    }
        return 0;
    }

运行结果及报错内容

img


img

img

我的解答思路和尝试过的方法
我想要达到的结果

不加入printf正常输出也可以。

修改处见注释,供参考:

#include<stdio.h>
int huiwen(int n)
{
    if (n == 0)
    {
        return 1;
    }
    else {
        int y = n, s = 0;//修改
        while (n != 0)
        {
            s = s * 10 + n % 10;
            n = n / 10;
        }
        if (s == y)
            return 1;
        else
            return 0;
    }
}
int prime(int n)
{
    int s;
    if (n <= 1)
        return 0;
    for (s = 2; s * s <= n; s++)
    {
        if (n % s == 0)
            return 0;//break; 修改
    }
          //if (s * s <= n) 修改
          //    return 0;
    return 1;
}

int main()
{
    int l, r, i, p, q;
    while (scanf("%d%d", &l, &r) != EOF)
    {
        for (i=0; l <= r; l++) //修改
        {
            p = huiwen(l);
            q = prime(l);
            if (p == 1 && q == 1)
            {
                i++;
            }
        }
        printf("%d\n", i);
    }
    return 0;
}

第9行的s应该初始化为0
第29行可以直接return 0,不需要break
32-34直接改成return 1;
第42行,增加i=0;对于每组测试数据,i应该初始化为0,不然就是累加了