2016-12-11 55 views
0

我一直在研究這個十六進制轉換器,並且程序中的某處似乎存在邏輯錯誤。我使用g ++工具在Ubuntu上運行它,每次運行t程序時,它都會給我一大堆垃圾值。我找不到垃圾值的來源,也找不到邏輯錯誤的來源。我是編程的新手,所以請幫我弄清楚我的錯誤。C++十六進制轉換器代碼中的邏輯錯誤

#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};