2016-10-16 15 views
0
int main(){ 
int n,i=0,c1,c2; 
char a[1000]; 
scanf("%d",&n); 

while(n!=0) 
{ 
    a[i]=n%2; 
    printf("%d",a[i]); // This prints Values Correctly 
    n=n/2; 
    i++; 

}  
a[i]='\0'; 
for(i=0;a[i]!='\0';i++) 
printf("%d",a[i]); //This prints only the first element of the array 
} 

ここでは何が欠けていますか?私がループ中にそれを印刷しようとすると動作しますが、なぜ文字配列の値をループして出力できないのですか?cの文字配列から整数を出力

+1

'a [i]!= '\ 0''は' a [i]!= 0'です – BLUEPIXY

+0

どうすれば避けられますか?私はstrlen(a)関数を使用することはできません、それはジャンクの値を与えます – Khacho

+0

カウントビット(後で 'int countBit = i;') 'i BLUEPIXY

答えて

1

入力が12のような偶数の場合、格納される最初の桁は0であり、定義された配列は文字配列であるため、実際にはNULLを意味します。

入力が偶数のときは何も印刷されないためです。ここで

は、あなたが何ができるかです:あなたが使用

#include<stdio.h> 
int main(){ 
int n,i=0,c1,c2; 
char a[1000]; 
scanf("%d",&n); 

while(n!=0) 
{ 
    a[i]='0' + n%2; //note here 
    // printf("%d",a[i]); // This prints Values Correctly 
    n=n/2; 
    i++; 

}  
a[i]='\0'; 
for(i=0;a[i]!='\0';i++) 
printf("%c",a[i]);  
} 
+0

ありがとう – Khacho

3

char型の配列を使用して整数を格納すると、配列は文字列ではありません。除算の残りの部分を2で保存するため、ほとんどの要素の値は0になります。

nullで終わる行を削除します。変数iはすでに入力された要素の数を数えるので、i要素を出力するまで反復して印刷します。

+0

もう1つ、なぜstrlenを使うと文字列の長さが間違ってくるのですか? – Khacho

+0

@Khacho配列は文字列として使われていないので、あなたは整数を格納する場合は、intまたはsignedまたはunsigned charを使用したい文字列ストア文字を使用する場合: '' 1 '、' 0 ''。 – 2501

+0

助けてくれてありがとう – Khacho

1

まず最初に[I] = N%2、nは整数値はそう何が起こることを言うのn = 65です(Aの場合)、その後65基本的には、nの値に応じて1回目または2回目の繰り返しでnull値を保存しました。%2 = 1(今はa [0] = 1)65/2 = 32です。

理解とデバッグのためにコードを少し編集しました。

#include<stdio.h> 
int main(){ 
int n,i=0,c1,c2; 
char a[1000]; 
scanf("%d",&n); 

while(n!=0) 
{  
a[i]=n%2; 
printf("%d\t%d\t%c\n",a[i],i,a[i]); // This prints Values Correctly 
n=n/2; 
i++; 
} 
printf("%d\n",i); 
a[i]='\0'; 
printf("%d\t%d\n",a[i],i); 
for(i=0;a[i]!='\0';i++) 
printf("%d\t%d\n",a[i],i); //This prints only the first element of the   array 
} 

SAMPLEのRUN: -

Untitled.png

私はまた、このような愚かなエラーを投稿する前に、ループ内のprintfを使用してデバッグしてみてください、あなたはどんな結論に来る前に、ドライランを実行することをお勧めします。

関連する問題