2016-04-26 2 views
-2

に整数の文字配列を印刷し、私はそれが2進数を対応だに整数を変換する関数を作成するために必要なのです。しかし、私はto_binary関数のために与えられたmainとparametersを使用することを余儀なくされています。全体の問題は、32ビットの2進数を印刷する必要がありますが、それを分解するために、私はChar配列を印刷しようとしています。整数(おそらく問題)でいっぱいだと思っています。私がコンパイルすると、ブランク行(\ nから)が得られ、これをどのように修正できるのか不思議です。私がしたいのは、5(101)の2進数を印刷できるようにすることだけですが、私は教授の制限でそれをすることはできません。注意:to_binaryまたはmainの引数を変更することはできません。to_binaryの本体だけを変更することはできません。どんな助けでも大歓迎です。はクラスのC

#include<stdio.h> 

void to_binary(int x, char c[]) { 

    int j = 0; 

    while (x != 0) { 
     c[j] x = x % 2; 
     j++; 
    } 
    c[33] = '\0'; 
} 

int main() { 
    int i = 5; 
    char b[33]; 
    to_binary(i,b); 
    printf("%s\n", b); 
} 
+4

をお知らせよりもエラーが含まれていますnumber.ifそれは単純に4桁のバイナリに未満16進数に変換します役立つかもしれません。 .. c [j] x = x%2; '? –

+4

さらに、配列インデックスは* 0 *ベースであることを忘れているので、インデックス '33'を使用すると配列の要素番号34にアクセスします。また、[ASCIIテーブル](http://en.cppreference.com/w/cpp/language/ascii)が役に立ちます。文字 '' 1 'の値は整数ではありません* 1 '。 –

+0

あなたのコード全体を投稿に入れてください。コードが大きすぎる場合は、[mcve](http://stackoverflow.com/help/mcve)を提供してください。 – jdarthenay

答えて

0

これは、あなたの質問への答えです。

void to_binary(int x, char c[]) { 
    int i =0; 
    int j; 
    while(x) { 
     /* The operation results binary in reverse order. 
     * so right-shift the entire array and add new value in left side*/ 
     for(j = i; j > 0; j--) {  
      c[j] = c[j-1]; 
     } 
     c[0] = (x%2) + '0'; 
     x = x/2; 
     i++; 
    } 
    c[i]=0; 
} 
0

問題は、以下のコードである:

while (x != 0) { 
    c[j] = x % 2; // origin: c[j] x = x % 2; a typo? 
    j++; 
} 

x % 2の結果は整数ですが、文字c[j]にそれを割り当て - 整数1文字'1'から等しくありません。あなたは、たとえば、文字形式の整数(0-9)を変換したい場合は

:整数7を文字'7'に、あなたはこれを行うことができます。前の回答の

int integer = 7; 
char ch = '0' + integer; 
+2

良い答えは、問題を指摘するだけでなく、解決策を提供すべきです。 – kaylum

0

一つは、すでに議論しましたc[j] x = x % 2;の問題と適切な文字変換の欠如。つまり、私は代わりに別の問題を指摘するつもりです。これはあなたの問題に対する具体的な解決策ではなく、むしろそれが推奨事項であると考えてください。

ヌル・ターミネータの配置をハードコーディングすることは良いアイデアではありません。実際には、望ましくない動作を引き起こす可能性があります。 「0」、私は「1」と最初の3つのインデックスを移入した場合

Values = _ _ _ _ _ 
Index = 0 1 2 3 4 

、及び「1」:私はメモリでは長さ5の自動char型の配列を作成し、それはこのようになります想像してみて配列は次のようになります。

Values = 1 0 1 _ _ 
Index = 0 1 2 3 4 

たとえば、インデックス4にヌルターミネータを含めるとします。配列は次のようになります。

Values = 1 0 1 _ \0 
Index = 0 1 2 3 4 

インデックス3がオープンスロットであることに注意してください。これは悪いです。 C/C++では、自動配列にはデフォルトでガベージ値が含まれています。さらに、文字列は、通常、ヌルターミネータに遭遇するまで文字から文字への反復処理によって出力されます。

配列は、それが奇妙な結果をもたらすであろう印刷し、前の例ではないように見えるとしたら。 1、0、1とそれに続く奇妙なゴミ値が表示されます。

溶液は、文字列の終了直後にヌルターミネータを設定することです。この場合、あなたはあなたの配列は次のようになりたい:

Values = 1 0 1 \0 _ 
Index = 0 1 2 3 4 

印刷機能は、インデックス3を読めば終了すると、インデックス4の値は、無関係です。

はここで参照のためのコードの例です:

#include <stdio.h> 

int main() { 

    const size_t length = 4; 
    char binary[length]; 
    size_t i = 0; 

    while (i < length - 1) { 
     char c = getchar(); 
     if (c == '0' || c == '1') 
      binary[i++] = c; 
    } 
    binary[i] = '\0'; 

    puts(binary); 

    return 0; 
} 
0
#include<stdio.h> 
int binary(int x) 
{ 
    int y,i,b,a[100]; 
    if(x<16) 
    { 
      if(x%2==1) 
        a[3]=1; 
      if(x/2==1||x/2==3 || x/2==5 || x/2==7) 
        a[2]=1; 
      if(x>4 && x<8) 
        a[1]=1; 
      else if(x>12 && x<16) 
        a[1]=1; 
      if(x>=8) 
        a[0]=1; 
    } 
    for(i=0;i<4;i++) 
      printf("\t%d",a[i]); 
    printf("\n"); 
} 

int main() 
{ 
    int c; 
    printf("Enter the decimal number (less than 16):\n"); 
    scanf("%d",&c); 
    binary(c); 
} 

このコードでは、それは私がコードはコンパイルすらないことを