回 帖 发 新 帖 刷新版面

主题:16进制转换为10进制

哪里错了啊
求救
#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个回复)

沙发

至少函数声明有问题,你的声明会被编译器理解为是无参函数,而实际上你传递了一个char*
作为递归来说,你的代码实在过长了

板凳

你是说不要前面的函数类型?那样不行啊

3 楼

unsigned long n,htod();
函数应该是unsigned long htod(char*);吧

4 楼


[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 楼

[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 楼


这个运行有六个错误。

  
 

7 楼

char buf[10];
gets(buf);
unsigned int nValue;
sscanf(buf, "%x", nValue);

8 楼

[quote]
这个运行有六个错误。

[/quote]
有什么错误贴出来我改 我这正常

9 楼

 

10 楼

楼上你的编程风格建议你还是改过来比较好.你IF和FOR都不加大括号吗?这种风格是哪本书上讲的?

我来回复

您尚未登录,请登录后再回复。点此登录或注册