C语言初学者请教一下各位大佬,这是什么原因导致的,有什么办法解决吗?

#include<stdio.h>
#include<stdlib.h>
main() {
    char a[100],c[100];
    int b[100];
    int i,k=0,e=16,w,q=0,g,p;
    for(i=0; i<100; i++) {
        a[i]=getchar();
        if(a[i]=='\n') {
            w=--i;
            break;
        }
        q++;
    }
    for(i=0; i<q; i++) {
        if(a[w]=='A'||a[w]=='a')
            b[i]=10;
        else if(a[w]=='B'||a[w]=='b')
            b[i]=11;
        else if(a[w]=='C'||a[w]=='c')
            b[i]=12;
        else if(a[w]=='D'||a[w]=='d')
            b[i]=13;
        else if(a[w]=='E'||a[w]=='e')
            b[i]=14;
        else if(a[w]=='F'||a[w]=='f')
            b[i]=15;
        else
            b[i]=a[w]-48;
        if(b[i]<0||b[i]>15) {
            c[i]=a[w];
            p=5;
            printf("a[w]=%d",a[w]);
            g=5;
        }
        printf("%d",b[i]);
        w--;
    }
    if(g==5) {
        printf("“");
        for(i=--q; i>=0; i--) {
            if(p==5) {
                printf("%c",c[i]);
            } else {
                b[i]=b[i]+48; 
                printf("%d",b[i]);
            }
        }
        printf("”不在十六进制范围内!");
        return 0;
    }
    for(i=0; i<q; i++) {
        if(i==0) {
            e=1;
        } else {
            e=e*16;
        }
        b[i]=b[i]*e;
        printf("\tb[i]=%d-e=%d",e,b[i]);
    }
    for(i=0; i<q; i++) {
        k=k+b[i];
    }
    printf("\tk=%d",k);
}

 

您好,根据您的意思是希望将十六进制数字转为十进制数字。但是没有太看明白代码里的具体每个变量的意思。

我这里重新写了一个十六进制转十进制的C代码,希望可以帮到您。

#include<stdio.h>
#include<stdlib.h>
main() {
    char a[100];
    int i, num = 0;
    for(i=0; i<100; i++) {
        a[i]=getchar();
        if(a[i]=='\n') {
            a[i] = '\0';
            break;
        }
        num++;
    }
    long long ans = 0;
    if(num > 16){
        printf("输入长度超过限制,请输入16位以内的十六进制数字。\n");
        return 1;
    }
    for(i = 0; i < num; i++){
        if(a[i] >= '0' && a[i] <= '9'){
            ans = ans * 16 + a[i] - '0';
        }
        else if(a[i] >= 'a' && a[i] <= 'f'){
            ans = ans * 16 + a[i] - 'a' + 10;
        }
        else if(a[i] >= 'A' && a[i] <= 'F'){
            ans = ans * 16 + a[i] - 'A' + 10;
        }
        else{
            printf("你的输入字符串%s有误,不属于十六进制的范畴。\n", a);
            return 1;
        }
    }
    printf("输入的十六进制%s,得到的十进制数字是:%lld\n", a, ans);
    return 0;
}

敢学c的都是脑子很聪明的啊

您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632