C语言循环语句问题求解

输入一个数n,则计算1-3+5-7+..以此类推(其中共有n个数),并输出结果
例如,输入一个数4,计算1-3+5-7,输出结果为-4
我的代码如下,不知道如何解决正负号的转换,输出结果很奇怪
谁来找一下问题

#include <stdio.h>
void main()
{
    int n, i, s, flag = 1;
    scanf_s("%d",&n);
    for (s = 0, i = 1; i <= 2 * n - 1; i = i + 2)
        s =s + i * flag * (-1) ^ i;
    printf("和为%d\n", s);
}


    int sum=0,flag=1,n;
    scanf("%d",&n);
    for (int i = 1; i <= n*2; i+=2)
    {
        sum+=i*flag;
        flag=-flag;
    }
    printf("%d\n",sum);
    return 0;