16进制转10进制,哪里不对?(输出只有0)

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

int i, sum;

int main()

{

void change(char str[]);

void caculate(char str[]);

char str[50];

gets(str);

change(str);

caculate(str);

system("pause");

return 0;

}

void change(char str[])

{

for (i = 0; str[i] != '\0'; i++)

{
    if (str[i] <= 'Z' && str[i] >= 'A')

        str[i] = str[i] - 55;

    else if (str[i] >= 'a')

        str[i] = str[i] - 87;
    else
        str[i] = str[i] - 48;
}

}

void caculate(char str[])

{
int j = 1;
for (sum = str[0] * pow(16, i - j); j < i; j++);
{

    sum = sum + str[j] * pow(16, i - j - 1);

}
printf("%d", sum);

}

你把sum定义在循环里面了