2016-12-11 15 views
0

私はこの16進数コンバータを使用していましたが、プログラムのどこかに論理エラーがあるようです。私はg ++ツールを使ってUbuntu上で実行しました。そして、私はtプログラムを実行するたびに、私に大量のガベージ・ヒープを与えます。私はガベージ値のソースを把握することはできませんし、どちらも論理エラーの原因を見つけることはできません。私はプログラミングの初心者ですので、私の間違いを理解するのを助けてください。C++の論理エラー16進数コンバータコード

#include <iostream> 
#include <math.h> 
using namespace std; 
int main() 
{ 
    int bin[20],finhex[10],num,bc=0,i,j,k,l=0,r=10,n=1,binset=0,m=0; 
    int hex[16]= {0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111}; 
    char hexalph='A'; 
    cout<<"\nEnter your Number: "; 
    cin>>num; 
    while(num>0) 
    { 
     bin[bc]=num%2; 
     num=num/2;   
     bc++; 
    }  
    if(bc%4!=0) 
    bc++; 
    for(j=0;j<bc/4;j++) 
     for(i=0;i<4;i++) 
     { 
      binset=binset+(bin[m]*pow(10,i)); 
      m++; 
     } 
     for(k=0;k<16;k++) 
     { 
      if(hex[k]==binset) 
      { 
       if(k<=9) 
        finhex[l]=k; 
       else 
        while(n>0) 
        {  
         if(k==r) 
         { 
          finhex[l]=hexalph; 
          break; 
         } 
         else 
         { 
          hexalph++; 
          r++; 
         } 
        }  
       l++; 
       r=10; 
       binset=0; 
       hexalph='A'; 
       break; 
      } 
     } 
     while(l>=0) 
     { 
      cout<<"\n"<<finhex[l]; 
      l--; 
     } 
return 0; 
} 
+0

@ user64322ここで私を助けてください。 –

答えて

0
int hex[16]= {0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111}; 

私はあなたのために小数点以下にこれらの値を変換することを許可する:

int hex[16] = {0, 1, 8, 9, 64, 65, 72, 73, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111}; 

あなたがそれらをバイナリリテラルと考えることにしたいなら、あなたはそのように指定することも必要またはコンパイラが理解できる他の形式にすることができます。

int hex[16] = {0b0000, 0b0001, 0b0010, 0b0011, 0b0100, 0b0101, 0b0110, 0b0111, 0b1000, 0b1001, 0b1010, 0b1011, 0b1100, 0b1101, 0b1110, 0b1111}; 

int hex[16] = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf};