发布网友 发布时间:2024-10-10 22:06
共1个回答
热心网友 时间:2024-10-12 10:51
//你的条件判断出问题了,略作修改如下:
#include<stdio.h>
long str2int(char *s)
{
long n;int i; int is8=0; //88进制标记
if(s[0]=='0'&&s[1]>='1'&&s[1]<='8')
{
is8=1; //8进制
for(n=0,i=1;s[i];i++)
n=n*8+s[i]-'0';
}
if(s[0]=='0'&&s[1]=='x'||s[1]=='X')
for(i=2,n=0;s[i];i++)
{if(s[i]>='0'&&s[i]<='9')
n=n*16+s[i]-'0';
if(s[i]>='a'&&s[i]<='g')
n=n*16+s[i]-'a'+10;
if(s[i]>='A'&&s[i]<='G')
n=n*16+s[i]-'A'+10;}
else
if(!is8) //确认不是8进制
{
for(n=0,i=0;s[i];i++)
n=n*10+s[i]-'0';
}
return n;
}
void main()
{char s[20];
gets(s);
printf("%ld",str2int(s));
}