(少于80 个字符),滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),然后
将其转换为十进制数后输出。#include<stdio.h>intmain(void){chars[80],a[80];intb[80];inty=0,z=...
将其转换为十进制数后输出。
#include<stdio.h>
int main(void)
{
char s[80],a[80];
int b[80];
int y=0,z=1,i,j=0;
printf("Input a string: ");
gets(s);
for(i=0;i<80;i++){
if((s[i]>='0'&&s[i]<='9')||(s[i]>='a'&&s[i]<='f')){
a[j]=s[i];
j++;
}
}
a[j]='\0';
for(i=0;i<j;i++){
if(a[i]>='0'&&a[i]<='9')
b[i]=a[i]-'0';
else
b[i]=a[i]-'a'+10;
}
b[i]='\0';
for(i=j-1;i>=0;i--){
y+=b[i]*z;
z*=16;
}
printf("Hex=%d",y);
return 0;
}
输出一个很大的数,问题出在哪儿 展开
#include<stdio.h>
int main(void)
{
char s[80],a[80];
int b[80];
int y=0,z=1,i,j=0;
printf("Input a string: ");
gets(s);
for(i=0;i<80;i++){
if((s[i]>='0'&&s[i]<='9')||(s[i]>='a'&&s[i]<='f')){
a[j]=s[i];
j++;
}
}
a[j]='\0';
for(i=0;i<j;i++){
if(a[i]>='0'&&a[i]<='9')
b[i]=a[i]-'0';
else
b[i]=a[i]-'a'+10;
}
b[i]='\0';
for(i=j-1;i>=0;i--){
y+=b[i]*z;
z*=16;
}
printf("Hex=%d",y);
return 0;
}
输出一个很大的数,问题出在哪儿 展开
1个回答
展开全部
代码思路和表达都没有错误。问题是int型的值域很小,稍长的字符串按16进制数解析就越界了。提供两个建议改善:一是将int型改定义为unsigned int型,可以稍稍扩大一点数域,二是最好把结果定义为字符串处理。供参考……
追问
但把i<80改成i<strlen(s)就对了,为什么
追答
不给你说溢出了吗?改为i<strlen(s);就是你输入了几个字符就算几个字符而不是一真认为是80个字符;在输入较短的情况下就正常了。不过这不是解决问题的办法,你试试输入一个长度达50、60的字符串,其中16进制数字占到8位以上就不行了。
上海巴鲁图工程机械科技有限公司_
2022-05-15 广告
2022-05-15 广告
增量编码器一般输出信号是两路正交脉冲信号和一路参考信号,之所以叫增量是因为它的位置信号是通过对脉冲计数累加得到,依靠计数设备的内部记忆来记住位置,并且同每圈输出的参考信号来清除累计误差. 缺点就是断电后,需要重新寻找初始位置. 例如打印机扫...
点击进入详情页
本回答由上海巴鲁图工程机械科技有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询