求大神解答,小弟我的count值为什么不能输出值?好郁闷啊

求大神解答,我的count值为什么不能输出值?好郁闷啊。
#include<stdio.h> 
   void swap();
   int main()
   {
    int a,b,c,i,count=0,sum=0;
    scanf("%d %d",&a,&b);
      for(a;a<=b;a++)
{
 //printf("%d\n",a);
         swap(a,sum);
         if(sum==a)
   {
          count++;
          //printf("%d,%d\n",a,count);
   }
   sum=0;
}
        printf("%d",count);
    return 0;
   }
   void swap(int a,int sum)
   {
    int n;
    int i;
    for(i=1;i<a;i++)
   {
    n=a%i;
     if(n==0)
{
      sum+=i;
     // printf("%d %d\n",sum,i);
       }
    }
   }

------解决思路----------------------
因为你的swap函数用传值的方式来传递参数,swap函数内,sum累计加总,但无法将值传回给外部调用者,也就是main函数中的sum,所以main函数中的sum永远是0。改成如下即可:
#include<stdio.h> 
void swap(int a, int *sum);
int main()
{
    int a,b,c,i,count=0,sum=0;
    scanf("%d %d",&a,&b);
    for(a;a<=b;a++)
    {
        //printf("%d\n",a);
        swap(a,&sum);
        if(sum==a)
        {
            count++;
            //printf("%d,%d\n",a,count);
        }
        sum=0;
    }
    printf("%d",count);
    return 0;
}
void swap(int a,int *sum)
{
    int n;
    int i;
    for(i=1;i<a;i++)
    {
        n=a%i;
        if(n==0)
        {
            *sum+=i;
            //    printf("%d %d\n",sum,i);
        }
    }
}

------解决思路----------------------
这样的函数内容为什么用swap做函数名啊?swap函数声明的时候,形参数量和类型没写。整个程序想实现什么功能也没写
------解决思路----------------------
int *sum, 表示sum是个整型指针; *sum, 表示取这个地址的内容。你要先搞明白指针是什么,以及函数传值和传指针的区别。
------解决思路----------------------
仅供参考:
#include <stdio.h>
#define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0)
char   *p1="1" ,*p2="2" ;
char    c1=1   , c2=2   ;
short   s1=1   , s2=2   ;
int     i1=1   , i2=2   ;
__int64 I1=1i64, I2=2i64;
float   f1=1.0f, f2=2.0f;
double  d1=1.0 , d2=2.0 ;
void main() {
    SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);
    SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);
    SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);
    SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);
    SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);
    SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);
    SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);

    SWAP(c1,c1);
    printf("%d\n",c1);
}
//char *         2,       1
//char           2,       1
//short          2,       1
//int            2,       1
//__int64     2,    1
//float          2,       1
//double        2,      1
//2