代码没办法输出最后内容

  1. 实验06-8:字符串转换成十进制整数
    【问题描述】输入一个以'#'结束的字符串,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数的字符串,然后将其转化为十进制数后输出。如果过滤后字符串的首字符为'-',代表的是负数。
    【输入形式】一个字符串
    【输出形式】一个十进制整数
    【样例输入】+P-xf4+-1!#
    【样例输出】-3905
    【样例说明】输入的内容,按十六进制数要求将数值(09,AE)和符号(在数值之前的'-')保留,得到-f41,转换为十进制后市-3905
    就是我敲的代码,没有办法输出最后的十进制的值
#include<stdio.h>
#include<math.h>
int main()
{
    char a[20],b[20]={0};
    int n=0,i,j=0,c=0,s=0;
    while((a[n]=getchar())!='#')
    {
        n++;
    }
    for(i=0;i<n;i++)
    {
        if((a[i]>='0'&&a[i]<='9')||(a[i]>='a'&&a[i]<='f'))
        {
            b[j]=a[i];
            j++;
            if(c!=0)
            {
                c++;
            }
        }
        if(c==0)
        {
            if(a[i]=='-')
            {
                b[j]=a[i];
                c++;
                j++; 
            }
        }
    }
    printf("%s",b); 
    n=j-1;
    c=0;
    for(i=n;n>0;i--)
    {
        if(b[i]>='0'&&b[i]<='9')
        c=pow(16,n-i)*(b[i]-'0');
        if(b[i]>='a'&&b[i]<='e')
        c=pow(16,n-i)*(b[i]-'a'+10);
        s=s+c;
            }
        printf("%d",s);
    if(a[0]=='-')
    {
        printf("-%d",s);
    }
    else
    {
        if(b[i]>='0'&&b[i]<='9')
        c=pow(16,n)*(b[i]-'0');
        if(b[i]>='a'&&b[i]<='e')
        c=pow(16,n)*(b[i]-'a'+10);
        s=s+c;
        printf("%d",s);
    }
 } 

希望帮忙看看感激不尽.

img

大写的十六进制字符 A~F没有判断