下面是我自己编写的十六进制转十进制的c语言代码,通过了编译但运行闪退。不哪里有问题。
#include<stdio.h>
#include<string.h>
#include<math.h>
//将字母转换为数字。
int tra(char a[],int i){
switch(a[i]){
case 'A':a[i]=10;break;
case 'B':a[i]=11;break;
case 'C':a[i]=12;break;
case 'D':a[i]=13;break;
case 'E':a[i]=14;break;
case 'F':a[i]=15;break;
default:break;
}
return a[i];
}
//计算每位十六进制数的单位大小。
int len(char a[],int i){
int l,j;
l=strlen(&a[i])-1;
j=pow(16,l);
return j;
}
//将各位求和得十进制数。
int add(char a[]){
int i,n;
long long s=0;
for(i=0;i<strlen(a);i++){
a[i]=tra(a,i);
n=len(a,i);
s+=a[i]*n;
}
return s;
}
int main(void){
char a[8];
long long sum=0;
int i;
//for(i=0;i<8;i++)scanf("%c",&a[i]);
gets(a);
//getchar();
sum=add(a);
printf("%ld",sum);
return 0;
}
最佳答案
#include<stdio.h>
#include<string.h>
#include<math.h>
//将字母转换为数字。
int tra(char a[],int i)
{
switch(a[i])
{
case 'A':a[i]=10;break;
case 'B':a[i]=11;break;
case 'C':a[i]=12;break;
case 'D':a[i]=13;break;
case 'E':a[i]=14;break;
case 'F':a[i]=15;break;
default:break;
}
return a[i];
}
//计算每位十六进制数的单位大小。
int len(char a[],int i){
int l,j;
l=strlen(&a[i])-1;
j=pow(16,l);
return j;
}
//将各位求和得十进制数。
int add(char a[]){
int i,n;
long long s=0;
for(i=0;i<strlen(a);i++){
a[i]=tra(a,i);
n=len(a,i);
s+=a[i]*n;
}
return s;
}
int main(void){
char a[8];
long long sum=0;
int i;
//for(i=0;i<8;i++)scanf("%c",&a[i]);
gets(a);
//getchar();
sum=add(a);
printf("%ld",sum);
return 0;
}
每个C语言程序都要调用一个名为main的函数(主函数),但你在开头定义了一个名为tra的函数,没有主函数,主函数就是什么都没有,所以该程序没有任何作用。
追答:所以请加上主函数,为:另外,你的赋值了一个名为a[]的数组,但其实只要名为a的变量就行了,所以再改为#include<stdio.h>#include<string.h>#include<math.h>int tra(char a[],int i);int main(){char a;scanf("%c",&a);tra(a,i);}。。。//其他不用改return 0;}从你并不太美观的程序中看出你应该初学不久,我还是认为你最好不要做这种较为复杂的程序,我看你的程序有些杂乱无章,无法做较好的订正,只是解决了闪退的问题。
不好意思没把#include<stdio.h>打好
其他回答
暂无其它回答!