我正在尝试开发一个关于转换的程序。该程序应该将二进制,八进制和十六进制数字转换为十进制数。这个程序包含一些错误,因为十进制数是错误的。任何人都可以帮助我吗? 这里是代码:十六进制,八进制,二进制到十进制(C++)
#include <conio.h>
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
int Decimal,Lenght,Pos_bit,x,base,i,n;
//Pos_bit=Exponent
char c[9];
int main()
{
Decimale=0;
Pos_bit=0;
n=0;
cout<<"Select a conversion method"<<endl;
cout << endl << endl;
cout << "1)Binary-Decimal" << endl;
cout << "2)Octal-Decimal" << endl;
cout << "3)Hexa-Decimal" << endl;
cin >> x;
switch (x)
{
case (1):
base=2;
break;
case (2):
base=8;
break;
case (3):
base=16;
}
cout<<"How many digits has the number?"<<endl;
cin>>Lenght;
Pos_bit=Lenght;
for(i=0;i<Lenght;i++,Pos_bit--)
{
cout<<"Type-bit value"<<endl;
cin>>c;
if(base==2){
if(c[i]==48){
n=0;}
else if(c[i]==49){
n=1;}
Decimal=Decimal+n*(pow(2,Pos_bit));
}
else if(base==8){
if ((c[i]>=48)&&(c[i]<=55)){
n=c[i]-48;}
Decimal=Decimal+n*(pow(8,Pos_bit));
}
else if(base==16){
if((c[i]>=48 && c[i]<=57)){
n=c[i]-48;}
else if((c[i]>=65)&&(c[i]<=70)){
n=c[i]-55;}
else if((c[i]>=97)&&(c[i]<=102)){
n=c[i]-87;}
Decimal=Decimal+n*pow(16,Pos_bit);
}
}
cout<<"Decimal number is"<<Decimal<<endl;
getch();
system("cls");
return 0;
}
感谢您的帮助!
详细说明你的问题。你的测试输入是什么?你的预期产出是多少?实际产出是多少?你能把你所有的代码翻译成英文吗?情境很重要。而任何东西,但输出应该是英文无论如何。也就是说,你到目前为止尝试隔离错误的方法是什么?使用调试器?任何情况下的基本提示,你都应该通过使用函数真正划分你的程序。使调试方式更快。 – Aziuth
除了以前的评论:你应该避免使用“48”或“55”等“魔术”数字,而应该使用“0”和“7”等,这更清晰。 –
这是你应该使用调试器的东西。在'cin >> x'行后面设置一个断点,单步执行代码并在每一步中检查变量的实际值是否符合您的期望值。 – zett42