在编写这个程序的时候,思路不是很清晰,也犯了很多错误,好在错误找出来了,尤其是变量的设定上,存在各种不同用途变量混淆使用的问题,引以为戒!
/************************************
/* 学生:刘中华
/* 日期:2014-1-10
/* 功能:十六进制到十进制转换
/*
***************************************/
#include<iostream>
#include<cmath>
using namespace std;
void scale_change(char a[]);// 这里换了几个错误,刚开始提示某某地址不能写,说明我的指针值有问题,指到了错误的地方,后来编译没错,
void main() //但是结果是-88923992什么类似的数,基本就是未初始化的情况,说明程序没有按照我的要求运行,赋值操作
{ //没有成功,后来查找发现是变量设定有误。这里,我使用的变量比较多,有的变量用来指示位置,有的来做循环
char str[10]; //变量,有的是作为存值的变量,这里是指示位置的变量和循环变量混淆,导致出错。既然是指示变量的位置,那么
//ch++; //值应该相对固定,元素位置变,此变量才变,而循环变量则并不涉及其他影响,只是 用来控制循环次数,每次使用
//cout<<ch; //循环,都将可以初始化。
gets(str); //*********************************************************
//教训:以后设置变量的时候,各种变量分开设置,在草稿纸上分开注明,避免后面在用的时候,混淆,并且,可以
scale_change(str); //设定一些经常用来做循环变量的量,以后,这些变量就固定来做循环变量,不常用的变量来指示位置,避免出错
}
void scale_change(char a[])
{
int i=0,j=0,b[10],num=0,k=0,p;//i指示a数组中的位置,j指示b数组中的位置,p作为循环变量控制,k只是最后存了一下j的值
char ch;
while(a[i]!='\0')//num存最后的十进制数
{
int m=10,n=0;
if(a[i]>=65&&a[i]<=70)//字符在A到F内,则需判断,具体是哪个字符,这里ch是字符型变量,故用ASCII判断
{
ch='A';
cout<<a[0]<<endl;
for(p=0;p<6;p++,ch++,m++)//m,n与ch对应,分别表示相应的十进制数
if(a[i]==ch)
{
b[j]=m;
cout<<b[0]<<endl;
break;
}
}
else if(a[i]>=48&&a[i]<=57)//字符在0-9内,也需要具体判断应该对应的是哪个数
{
ch='0';
for(p=0;p<10;p++,ch++,n++)
{
if(a[i]==ch)
{
b[j]=n;
break;
}
}
}
j++,i++;//每执行完一个字符的判断,b【】数组加1,最后j就能表示b中有效数字的个数
}
k=j;
cout<<j<<" "<<k<<" "<<endl;
for(p=0;p<10;p++)
cout<<b[p]<<" ";
for(i=0;i<k;i++)
num+=b[i]*pow(16,(j-1-i));
cout<<num<<endl;
}