2016-12-11 54 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};