很纳闷,找不出问题所在

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

自己写的十六进制转十进制代码,它不适用于类似123ABC这种数字和英文一起的,但是像F,39这种却可以运行,我在下面的代码中有区分它们,这是为什么呢?

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>

int main()
{
    int t,len,i,base;
    int ans;
    char s[33];
    scanf("%d",&t);
        scanf("%s",s);
        len=strlen(s);
        ans=0;
        base=1;
       
        for(i=len-1;i>=0;i--)
        {
        if(s[i]=='A'||s[i]=='B'||s[i]=='C'||s[i]=='D'||s[i]=='E'||s[i]=='F')
        { ans=ans+(s[i]-'7')*base;}
        
        else{ans=ans+(s[i]-'0')*base;}
                        base*=16;
                
        }
        printf("%d",ans);
    
    
    return 0;
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

输入的时候你可以都按照%s去读入,然后处理的时候将0到9的字符``-'0'获得原始数字,不需要在输入时做区分
具体的,不要用scanf(%d),直接用%s读入即可
有帮助望采纳~

你要区分什么啊
代码没有什么问题, 只是 scanf("%d", &t); 和t变量没有用,可以去掉

输入123ABC这种数字和英文直接用 scanf("%s", s);读取整个字符串"123ABC"即可, 不需要t变量

你题目的解答代码如下:

#include <stdio.h>
#include <string.h>

int main()
{
    int len, i, base;
    int ans;
    char s[33];
    // scanf("%d", &t); 这行没有用
    scanf("%s", s);
    len = strlen(s);
    ans = 0;
    base = 1;

    for (i = len - 1; i >= 0; i--)
    {
        if (s[i] == 'A' || s[i] == 'B' || s[i] == 'C' || s[i] == 'D' || s[i] == 'E' || s[i] == 'F')
        {
            ans = ans + (s[i] - '7') * base;
        }

        else
        {
            ans = ans + (s[i] - '0') * base;
        }
        base *= 16;
    }
    printf("%d", ans);

    return 0;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

你把第九行去掉就好了