私はコンバージョンに関するプログラムを開発しようとしています。このプログラムは、バイナリ、8進数、16進数を10進数に変換する必要があります。このプログラムには、10進数が間違っているため、いくつかの間違いがあります。誰でも助けてくれますか?ここ は、コードは次のとおりです。あなたの助けのためのHexa、8進数から10進数へのバイナリ(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