将输入字符串作为16进制,输出对应十进制

在编写这个程序的时候,思路不是很清晰,也犯了很多错误,好在错误找出来了,尤其是变量的设定上,存在各种不同用途变量混淆使用的问题,引以为戒!
/************************************
/*		学生:刘中华
/*		日期: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;
	

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值