我想将十六进制字符串转换为十进制数字。但我的结果是不同的。 这是我在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;
}
答案 0 :(得分:2)
要点1.您从未初始化i
。没有为c
提及的类型[也许它会将类型默认设置为int
]
第2点。您没有使用循环来检查输入中的所有数字[如果它有多个数字]。
第3点。您没有检查scanf()
要点4.您从未验证输入,也没有将输入限制为一位[按照当前逻辑]。
第5点。没有使用main()
的正确签名,没有return
[更多的良好做法观点]
和可能更多。我出去了。