c语言找完数,可以帮我看一下下哪里错了吗

大一新生学不明白c语言了!

程序功能:输入两个正整数m和n(1<=m<=n<=10000),输出m到n之间的所有完数(完数就是因子和与它本身相等的数)。要求定义并调用函数factorsum(i),它的功能是返回i的因子和。例如:factorsum(12)的返回值是16

非完数输出循环1,真的学不明白。

#include 
int main()
{
    int m, n, i;
    int fac(int i);
    printf("输入两个正整数m和n(1<=m<=n<=10000):");
    scanf_s("%d%d", &m, &n);
    printf("%d到%d之间的所有完数是:",m,n);
    i = m;
    while (i <= n)
    {
        if (i = fac(i))/*调用函数*/
        printf("%d  ", i);
        i++;
    }
    return 0;
}
int fac(int a)
{
    if (a == 1) return a;
    int sum = 0;
    for (int i = 1; i < a; i++) {
        if (a % i == 0)
            sum = sum + i;}
    if (a == sum)  return sum;
}

改动处见注释,供参考:

#include <stdio.h>
int main()
{
    int m, n, i;
    int fac(int i);
    printf("输入两个正整数m和n(1<=m<=n<=10000):");
    scanf("%d%d", &m, &n);
    printf("%d到%d之间的所有完数是:",m,n);
    i = m;
    while (i <= n)
    {
        if (i == fac(i))//调用函数 if (i = fac(i)) 修改
            printf("%d  ", i);
        i++;
    }
    return 0;
}
int fac(int a)//函数factorsum(i),它的功能是返回i的因子和
{
    //if (a == 1) return a;   修改
    int sum = 0;
    for (int i = 1; i < a; i++) {
        if (a % i == 0)
            sum = sum + i;
    }
    //if (a == sum)    修改
    return sum;
}

img


我也刚学,请问我用红线标的1出字符不一样有关系吗?
我用红笔标的第二处书上会打一个括号括起来
还有一处应该为if(i==)而不是if(i=)就是函数调用的地方