2017-08-21 5 views
0

私はCでバイナリコンバータへの単純な10進数を試していますが、コンソールは10進数を入力しても応答しません。ここに私のコードです。Decimal to Binaryコンバータ、コンソールが応答しません

int convertDecimalToBinary(int n); 


int main() 
{ 
    int n; 
    printf("Enter a decimal number: "); 
    scanf("%d", &n); 
    convertDecimalToBinary(n); 
    printf("%d in decimal = %d in binary", n, convertDecimalToBinary(n)); 
    return 0; 
} 

int convertDecimalToBinary(int n) 
{ 
    int binaryNumber = 0; 
    int remainder, i = 1; 

    while (n!=0); 
    { 
     remainder = n%2; 
     n /= 2; 
     binaryNumber += remainder*i; 
     i *= 10; 
    } 
    printf("%d\n",binaryNumber); 
    return binaryNumber; 

} 

私はすべてのエラーメッセージが届かないと私は小数を入力するように要求されていますが、その後、それが応答しなくです。

+0

出力がバッファされていて改行文字が印刷されないだけでなく、 –

+0

バイナリとは何ですか?私はあなたのアルゴリズムがあなたが思っていることをしていないと思う –

答えて

6

ループが無限ループする原因となっているタイプミスがあります。 whileの末尾にあるセミコロンは、ボディがないwhileループを作成します。

while (n!=0); 
    { 

while (n!=0) 
    { 
0

あなたのプログラムは非常に奇妙なフォーマットであるものに番号を変換する必要があります。

7は小数点で111になり、小数点では111100になります。しかし、この奇妙な "10進数のバイナリ"形式の符号付き整数の最大値が1111111111で、通常の数字で1024のIDである場合、オーバーフローすることになります。

unsigned long longに変更する必要があります。 11111111111111111111または1048575を「通常の」10進数にしておくか、数字を文字列に変換することができます。

任意の長さの任意の長い数字(ほとんどの場合、数字にはさらに文字が必要です)または簡単な第2の機能。最小負の数値では機能しません

char *reverse(char *str); 

const char digits[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

char *convert(long long number, char *buff, int base) 
{ 
    char *result = (buff == NULL || base > strlen(digits) || base < 2) ? NULL : buff; 
    char sign = 0; 

    if (number < 0) 
    { 
     sign = '-'; 
     number = -number; 
    } 
    if (result != NULL) 
    { 
     *result = 0; 
     do 
     { 
      *buff++ = digits[number % (base)]; 
      number /= base; 
     } while (number); 
     if(sign) *buff++ = sign; 
     if (!*result) *buff++ = '0'; 
     *buff = 0; 
     reverse(result); 
    } 
    return result; 
} 

char *convertToBIN(long long number, char *buff) 
{ 
    char *result = buff; 
    char sign = 0; 

    if (number < 0) 
    { 
     sign = '-'; 
     number = -number; 
    } 
    if (result != NULL) 
    { 
     *result = 0; 
     do 
     { 
      *buff++ = digits[number & 1]; 
      number >>= 1; 
     } while (number); 
     if (sign) *buff++ = sign; 
     if (!*result) *buff++ = '0'; 
     *buff = 0; 

     reverse(result); 
    } 
    return result; 
} 


char *reverse(char *str) 
{ 
    char tmp; 
    int len; 

    if (str != NULL) 
    { 
     len = strlen(str); 
     for (int i = 0; i < len/2; i++) 
     { 
      tmp = *(str + i); 
      *(str + i) = *(str + len - i - 1); 
      *(str + len - i - 1) = tmp; 

     } 
    } 
    return str; 
} 
関連する問題