C语言:写一函数,输入一个十六进制数,输出相应的十进制数。

#include<stdio.h>#include<string.h>voidmain(){chararray[100];voidfun(char);gets(array... #include<stdio.h>

#include<string.h>

void main()

{

chararray[100];

voidfun(char);

gets(array);

fun(array[100]);

}

void fun(char array[100])

{

int sum=0,i;

for(i=0;i<strlen(array);i++)

{

if('0'<array[i]&&array[i]<'9')sum=sum*16+array[i]-'0';

if('a'<array[i]&&array[i]<'z')sum=sum*16+array[i]-'a'+10;

if('A'<array[i]&&array[i]<'Z')sum=sum*16+array[i]-'A'+10;

}

printf("%d",sum);

} 有错误,是哪的错误?该怎么改?
展开
 我来答
问明6E
高粉答主

2019-06-03 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:12.9万
展开全部

#include&lt;stdio.h&gt;

#include&lt;math.h&gt;

#include&lt;string.h&gt;

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&gt;=0;i--)

{

if(a<i>&gt;='0'&&a<i>&lt;='9')

num+=(a<i>-'0')*pow(16,n-1-i);

else if(a<i>&gt;='A'&&a<i>&lt;='Z')

num+=(10+(a<i>-'A'))*pow(16,n-1-i);

else if(a<i>&gt;='a'&&a<i>&lt;='z')

num+=(10+(a<i>-'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&lt;stdio.h&gt;

int main()

{

char s[20];

printf("What's your name?\n");

gets(s);

printf("%s\n",s);

return 0;

}

当输入a bde回车的时候,会输出a bde。

子同1989
推荐于2018-02-23 · TA获得超过256个赞
知道小有建树答主
回答量:90
采纳率:0%
帮助的人:100万
展开全部
#include<stdio.h>
#include<string.h> 
#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;
}

运行结果

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风若远去何人留
推荐于2016-04-07 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部
有几个问题
一个是函数声明不对
函数调用有问题
判断数值临界不准,没有包含==的情况
算法可以写的简单一点
最终优化如下
#include<stdio.h>
#include<string.h>
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<strlen(array);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);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zsx10110
2013-07-05 · TA获得超过8872个赞
知道大有可为答主
回答量:2369
采纳率:66%
帮助的人:3099万
展开全部
#include<stdio.h>
#include<string.h>
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<strlen(array);i++)
       {
   if('0'<array[i]&&array[i]<'9')
   sum=sum*16+array[i]-'0';
   if('a'<array[i]&&array[i]<'z')
   sum=sum*16+array[i]-'a'+10;
   if('A'<array[i]&&array[i]<'Z')
   sum=sum*16+array[i]-'A'+10;
       }
   printf("%d",sum);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
凌空血舞
2018-07-05
知道答主
回答量:34
采纳率:50%
帮助的人:5.4万
展开全部
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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式