在c编程中将十六进制转换为十进制

时间:2015-02-06 08:04:18

标签: c for-loop

我想将十六进制字符串转换为十进制数字。但我的结果是不同的。 这是我在c:

中的代码
#include <stdio.h>  
main() {
    char c[100];
    int n,i;
    n=0;
    printf("Enter Your Hexadecimal:\n");
    scanf("%s",c);
    for(i=0; c[i]!='\n' ; i++)
    if(c[i]>='0' && c[i]<='9')         n=n*16+(c[i]-'0');
    else if(c[i]=='a' || c[i]=='A')     n=n*16+(10);
    else if(c[i]=='b' || c[i]=='B')     n=n*16+(11);
    else if(c[i]=='c' || c[i]=='C')     n=n*16+(12);
    else if(c[i]=='d' || c[i]=='D')     n=n*16+(13);
    else if(c[i]=='e' || c[i]=='E')     n=n*16+(14);
    else if(c[i]=='f' || c[i]=='F')     n=n*16+(15);
    printf("%d",n)
    getch();
}

结果是

Enter Your Hexadecimal:
2f
-585093843       /* This is the result of my code*/<br>

..........有些时候添加了答案!................
一年后,我为初学者和新人添加了这个问题的答案。C语言......希望有用

#include "stdio.h"
int main() {
    char c[100];
    int n,i;
    n=0;
    printf("Enter Your Hexadecimal:\n");
    scanf("%s",&c);
    for(i=0; c[i]!='\n' && c[i]!=0 ; i++){
            if(c[i]>='0' && c[i]<='9')
                n=n*16+(c[i]-'0');
            else if(c[i]=='A' || c[i]=='a')
                n=n*16+(10);
            else if(c[i]=='B' || c[i]=='b')
                n=n*16+(11);
            else if(c[i]=='C' || c[i]=='c')
                n=n*16+(12);
            else if(c[i]=='D' || c[i]=='d')
                n=n*16+(13);
            else if(c[i]=='E' || c[i]=='e')
                n=n*16+(14);
            else if(c[i]=='F' || c[i]=='f')
                n=n*16+(15);
            else{
                printf("Error:Your number Is Not Valid!");
                return -1;
            }       
    }
    printf("%d",n);
    return 0;
}

1 个答案:

答案 0 :(得分:2)

要点1.您从未初始化i。没有为c提及的类型[也许它会将类型默认设置为int]

第2点。您没有使用循环来检查输入中的所有数字[如果它有多个数字]。

第3点。您没有检查scanf()

是否成功

要点4.您从未验证输入,也没有将输入限制为一位[按照当前逻辑]。

第5点。没有使用main()的正确签名,没有return [更多的良好做法观点]

可能更多。我出去了。