c语言,查找m~n之间的素数,并求和。 waring了,这种情况是怎么回事?该如何解决呢?

c语言,查找m~n之间的素数,并求和。
warning了,这种情况是怎么回事?该如何解决呢?

img

#include <stdio.h>
int main()
{
    int m,n,sum = 0;
    int flag;
    scanf("&d&d",&m,&n);
    for (int i = m; i <= n; i++)
    {
        flag = 1;
        for(int j = 2;j < i;j++)
        {
            if(i % j == 0)
            {
                flag = 0;
                break;
            }  
        }
        if(flag)
        {
            printf("%d\n",i);
            sum = sum + i;
        }
    }
    printf("sum of prime numbers:%d\n",&sum);
    return 0;
}

之后看了正确答案,发现在定义上有不同,具体为什么上面的不行而下面的答案是可以的呢?这两者的区别体现在哪里?求解答

#include <stdio.h>
int main()
{
    int m, n,i,j,flag,sum=0;
    scanf("%d%d", &m, &n);
    for (i = m; i <= n; i++)
    {
        flag = 1;
        for (j = 2; j < i; j++)
        {
        if (i%j == 0)
        {
            flag = 0;
            break;
        }
        }
        if (flag)
        {
            printf("%d\n", i);
            sum = sum + i;
        }
    }
    printf("sum of prime numbers:%d\n", sum);
    return 0;
} 

1.因为正确的语法是printf("%d",sum),不应该存在取地址符号(&),printf("%d",sum)表示输出sum的值,printf("%d",&sum)表示输出sum的地址值,这个如果学习了指针应该会容易理解,所以没有报错,但是有结果
2.严格的c语言语法中for循环中不可临时定义变量,像你写的for(int i=m,i<=n,i++),但是c++语言可以,我想既然你的编译器可以运行成功,说明你并没有按照严格的创建c语言的.c文件,而是创建了.cpp文件,则默认了c++语法成立,所以你的变量定义和标准答案不同,标准答案是严格的c,所有变量只能在函数开头定义。