输入一个以回车符结束的字符串(少于80个字符),过滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出。

问题遇到的现象和发生背景

我输入123ywd的时候输出答案是错的;而输入123ydw的时候输出是正确的
我试过发现好像是每输入连续两个非十六进制字符的时候会保留后一个字符,但是我不知道怎么修改,请问这个问题怎么修改?

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{char a[80];
int i,j,t;
int s=0;
scanf("%s",a);
    for(i=0;i<80;i++)
    {
        if((!(a[i]>='0'&&a[i]<='9'))&&(!(a[i]>='A'&&a[i]<='F'))&&(!(a[i]>='a'&&a[i]<='f')))
        {
            for(j=i;j<strlen(a);j++)
            {
                a[j]=a[j+1];
            }
            j--;
        }
    }
s=0;
for(j=0;j<strlen(a);j++)
{
    if(a[j]>='A'&&a[j]<='F')
    {
        a[j]=(int)(a[j]-'A')+10+'0';
    }
        if(a[j]>='a'&&a[j]<='f')
    {
        a[j]=(int)(a[j]-'a')+10+'0';
    }
    
}
for(int t=0;t<strlen(a);t++)
{
    s=s*16+(a[t]-'0');
}
printf("%d",s);
return 0;
}

删除数组数据后,数组长度应该-1
其实,没必要删去数组元素
可以直接选取属于16进制的数进行运算

#include<stdio.h>
int main()
{
    char a[80];
    int i,j;
    int s=0;
    scanf("%s",a);
    for(i=0;i<80;i++)
    {
        if(a[i]>='0'&&a[i]<='9')
            s=s*16+a[i]-'0';
        else if(a[i]>='A'&&a[i]<='F')
            s=s*16+a[i]-'A'+10;
        else if(a[i]>='a'&&a[i]<='f')
            s=s*16+a[i]-'a'+10;
    }
    printf("%d",s);
    return 0;
}