[SWU]c语言 16进制转换为10进制,该怎么处理
[SWU]c语言 16进制转换为10进制
#include <stdio.h>
#define YES 1
#define NO 0
int htoi(char s[]);
int main()
{
int i;
char str[10];
scanf("%s",str);
i=htoi(str);
printf("%d\n",i);
}
/*htoi: convert hexadecimal string s to integer*/
int htoi(char s[])
{
int hexdigit, i, inhex, n;
i = 0;
if (s[i] == 0){
++i;
if (s[i] == 'x' || s[i] == 'X')
++i;
}
n = 0;
inhex = YES;
for ( ; inhex == YES; ++i){
if (s[i] >= '0' && s[i] <= '9')
hexdigit = s[i] - '0';
else if (s[i] >= 'a' && s[i] <= 'f')
hexdigit = s[i] - 'a' + 10;
else if (s[i] >= 'A' && s[i] <= 'F')
hexdigit = s[i] - 'A' + 10;
else
inhex = NO;
if (inhex == YES)
n = 16 * n + hexdigit;
}
return n;
}
比如我输入 0x1 执行输出都是0; 哪里错了 求指点
------解决方案--------------------
这里就错了。改为
#include <stdio.h>
#define YES 1
#define NO 0
int htoi(char s[]);
int main()
{
int i;
char str[10];
scanf("%s",str);
i=htoi(str);
printf("%d\n",i);
}
/*htoi: convert hexadecimal string s to integer*/
int htoi(char s[])
{
int hexdigit, i, inhex, n;
i = 0;
if (s[i] == 0){
++i;
if (s[i] == 'x' || s[i] == 'X')
++i;
}
n = 0;
inhex = YES;
for ( ; inhex == YES; ++i){
if (s[i] >= '0' && s[i] <= '9')
hexdigit = s[i] - '0';
else if (s[i] >= 'a' && s[i] <= 'f')
hexdigit = s[i] - 'a' + 10;
else if (s[i] >= 'A' && s[i] <= 'F')
hexdigit = s[i] - 'A' + 10;
else
inhex = NO;
if (inhex == YES)
n = 16 * n + hexdigit;
}
return n;
}
比如我输入 0x1 执行输出都是0; 哪里错了 求指点
------解决方案--------------------
if (s[i] == 0){
++i;
if (s[i] == 'x'
------解决方案--------------------
s[i] == 'X')
++i;
}
这里就错了。改为
if (s[i] =='0'){[/code]
++i;
if (s[i] == 'x'
------解决方案--------------------
s[i] == 'X')
++i;
}