2016-10-16 2 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

Да, это работает. Что еще, почему использование strlen дает неправильную длину строки? – Khacho

+0

@Khacho Поскольку массив не используется в качестве строки. хотите хранить целые числа с использованием символа int или signed или unsigned. Если вы хотите, чтобы строки сохраняли символы: ''1', '0''. – 2501

+0

Ok спасибо за помощь – Khacho

1

Первая вещь, которую вы использовали [I] = N% 2 и п представляет собой целое число, так что происходит, говорят, п = 65 (для A), то 65 % 2 = 1 (теперь a [0] = 1) 65/2 = 32 сейчас, для следующей итерации 32% 2 = 0, так что в основном вы сохранили нулевое значение на первой или второй итерации в зависимости от значения n.

Я отредактировал ваш код немного для лучшего понимания и отладки.

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

ОБРАЗЦА RUN: -

Untitled.png

Я также рекомендую, прежде чем отправлять на такие глупые ошибки, попробуйте отладки с помощью Printf в циклах и выполнить холостые прогоны, прежде чем прийти к каким-либо выводам.