主题:16进制转换为10进制
野鹤闲云
[专家分:0] 发布于 2010-06-13 19:22:00
哪里错了啊
求救
#include"stdio.h"
main()
{ char s[10];
unsigned long n,htod();
gets(s);
n=htod(s);
printf("%u\n",n);
}
unsigned long htod(char *s)
{ int i=0,x;unsigned long r=0;char c;
while(s[i]!='\0') i++;
x=i-1;
for(i=0;i<=x/2;i++)
{ c=s[i];
s[i]=s[x-i];
s[x-i]=c;
}
if((*s)<='F'&&(*s)>='A'&&*(s+1)!='\0')
r=htod(*(s+1))*16+(*s)-55;
else if(*(s+1)!='\0')
r=htod(*(s+1))*16+(*s)-48;
return (r);
}
回复列表 (共13个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2010-06-13 21:01:00
至少函数声明有问题,你的声明会被编译器理解为是无参函数,而实际上你传递了一个char*
作为递归来说,你的代码实在过长了
板凳
野鹤闲云 [专家分:0] 发布于 2010-06-13 21:56:00
你是说不要前面的函数类型?那样不行啊
3 楼
雪光风剑 [专家分:27190] 发布于 2010-06-13 22:18:00
unsigned long n,htod();
函数应该是unsigned long htod(char*);吧
4 楼
alweeq86 [专家分:1170] 发布于 2010-06-17 08:46:00
[code=c]
#include"stdio.h"
unsigned long htod(char *s);//应该提前声明成这样 不是unsigned long htod()
int main()
{ char s[10];
unsigned long n;
gets(s);
n=htod(s);
printf("%u\n",n);
return 0;
}
unsigned long htod(char *s)
{ int i=0,x;unsigned long r=0;char c;
while(s[i]!='\0') i++;
x=i-1;
for(i=0;i<=x/2;i++)
{ c=s[i];
s[i]=s[x-i];
s[x-i]=c;
}
if((*s)<='F'&&(*s)>='A'&&*(s+1)!='\0')
r=htod(s+1)*16+(*s)-55;//这里htod()中的参数应该是指针
else if(*(s+1)!='\0')
r=htod(s+1)*16+(*s)-48;//这里htod()中的参数应该是指针
return (r);
}[/code]
5 楼
alweeq86 [专家分:1170] 发布于 2010-06-17 21:13:00
[code=c]
#include"stdio.h"
#include <cstring>
unsigned long htod(char *s);
int main()
{ char s[10];
unsigned long n;
gets(s);
n=htod(s);
printf("%u\n",n);
return 0;
}
unsigned long htod(char *s)
{unsigned long r=0;
//给s串取倒序
char *cTemp=strrev(s);
if(*(cTemp+1)=='\0')//判断是否为最后一个字符
{
if (*cTemp<='F'&&*cTemp>='A') return *cTemp-65+10;
else if (*cTemp<='f'&&*cTemp>='a') return *cTemp-97+10;
else if (*cTemp<='9'&&*cTemp>='0') return *cTemp-48;
}
else
{
//获取copy s串的前strlen-1个字符 丢掉最后一个字符
char *ct=new char[strlen(s)];
strcpy(ct,cTemp+1);
strrev(ct);
if (*cTemp<='F'&&*cTemp>='A') return htod(ct)*16+*cTemp-65+10;
else if (*cTemp<='f'&&*cTemp>='a') return htod(ct)*16+*cTemp-97+10;
else if (*cTemp<='9'&&*cTemp>='0') return htod(ct)*16+*cTemp-48;
delete[]ct;
}
[/code]
这个可以正常运行
6 楼
野鹤闲云 [专家分:0] 发布于 2010-06-21 13:21:00
这个运行有六个错误。
7 楼
overfly [专家分:3230] 发布于 2010-06-21 16:48:00
char buf[10];
gets(buf);
unsigned int nValue;
sscanf(buf, "%x", nValue);
8 楼
alweeq86 [专家分:1170] 发布于 2010-06-22 09:21:00
[quote]
这个运行有六个错误。
[/quote]
有什么错误贴出来我改 我这正常
10 楼
强强 [专家分:4740] 发布于 2010-07-10 19:52:00
楼上你的编程风格建议你还是改过来比较好.你IF和FOR都不加大括号吗?这种风格是哪本书上讲的?
我来回复