#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
char a[10];
void convert(char a[]);
printf("请输入十六进制数:");
gets(a);//输入十六进制数
convert(a);
return 0;
}
void convert(char a[])
{
int n,i,num=0;
n=strlen(a);
for(i=n-1;i>=0;i--)
{
if(a>='0'&&a<='9')
num+=(a-'0')*pow(16,n-1-i);
else if(a>='A'&&a<='Z')
num+=(10+(a-'A'))*pow(16,n-1-i);
else if(a>='a'&&a<='z')
num+=(10+(a-'a'))*pow(16,n-1-i);
}
printf("转换十进制为:");
printf("%d",num);
}
gets()的用法:
gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束;但回车符不属于这个字符串。其调用格式为:gets(s);其中s为字符串变量(字符串数组名或字符串指针)。
gets(s)函数与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s)函数输入字符串时存在一个问题,就是如果输入了空格会认为输入字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到回车为止。
示例:
#include<stdio.h>
int main()
{
char s[20];
printf("What's your name?\n");
gets(s);
printf("%s\n",s);
return 0;
}
当输入a bde回车的时候,会输出a bde。
#include
#include
#define N 100
void main()
{
char array[N];
int fun(char*);
gets(array);
printf("%d\n", fun(array));
}
int fun(char *array)
{
int i, sum = 0;
for(i = strlen(array)-1; i>=0; i--)
{
if(array[i] >= '0' && array[i] <= '9')
sum = sum * 16 + array[i] - '0';
else if(array[i] >= 'a' && array[i] <= 'f')
sum = sum * 16 + array[i] - 'a' + 10;
else if(array[i] >= 'A' && array[i] <= 'F')
sum = sum * 16 + array[i] - 'A' + 10;
else
break;
}
return sum;
}
运行结果
有几个问题
一个是函数声明不对
函数调用有问题
判断数值临界不准,没有包含==的情况
算法可以写的简单一点
最终优化如下
#include
#include
void main()
{
char array[100];
void fun(char*);
gets(array);
fun(array);
}
void fun(char array[100])
{
int sum=0,i;
for(i=0;i
sum*=16;
if('0'<=array[i]&&array[i]<='9')
sum+=array[i]-'0';
if('a'<=array[i]&&array[i]<='z')
sum+=array[i]-'a'+10;
if('A'<=array[i]&&array[i]<='Z')
sum+=array[i]-'A'+10;
}
printf("%d",sum);
}
#include
#include
void main()
{
char array[100];
void fun(char array[100]);
gets(array);
fun(array);//这里改改
}
void fun(char array[100])
{
int sum=0,i;
for(i=0;i{
if('0'sum=sum*16+array[i]-'0';
if('a'sum=sum*16+array[i]-'a'+10;
if('A'sum=sum*16+array[i]-'A'+10;
}
printf("%d",sum);
}
double fun(U8 *array)
{
int i;
double sum = 0.0;
for(i = strlen(array)-1; i>=0; i--)
{
if(array[i] >= '0' && array[i] <= '9')
sum += pow(16.0,(double)(strlen(array)-i-1))*(array[i] - '0');
else if((array[i] >= 'a') && (array[i] <= 'f'))
sum += pow(16.0,(double)(strlen(array)-i-1))*(array[i] - 'a' + 10);
else if((array[i] >= 'A')&&(array[i] <= 'F'))
sum += pow(16.0,(double)(strlen(array)-i-1))*(array[i] - 'A' + 10);
else
break;
}
return sum;
}