在c中打印字符数组的整数

时间:2016-10-16 14:22:18

标签: c

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
}

我在这里缺少什么?为什么我不能遍历并打印char数组的值,虽然它在我尝试在循环中打印时有效?

3 个答案:

答案 0 :(得分:3)

具有char类型的数组用于存储整数,该数组不是字符串。因为你将除法的余数存储为2,所以大多数元素的值都为0。

删除null终止数组的行。变量i已经计算了输入的元素数,因此迭代并打印直到您打印i个元素。

答案 1 :(得分: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]);    
}

答案 2 :(得分:1)

首先你使用了[i] = n%2而n是一个整数值所以会发生n = 65(对于A)然后65%2 = 1(现在是[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
}

SAMPLE RUN: -

Untitled.png

我还建议在发布此类愚蠢错误之前尝试使用printf在循环中进行调试,并在得出任何结论之前执行干运行。