在c中打印字符数组中的整数
我错过了什么?为什么我不能循环并打印字符数组的值,尽管当我尝试在while loop中打印它时它可以工作?该数组具有char类型,用于存储整数,数组不是字符串。因为存储的是除以2的余数,所以大多数元素的值都是0在c中打印字符数组中的整数,c,C,我错过了什么?为什么我不能循环并打印字符数组的值,尽管当我尝试在while loop中打印它时它可以工作?该数组具有char类型,用于存储整数,数组不是字符串。因为存储的是除以2的余数,所以大多数元素的值都是0 删除null终止数组的行。变量i已经计算了输入的元素数,所以迭代并打印,直到打印i元素。具有char类型的数组用于存储整数,数组不是字符串。因为存储的是除以2的余数,所以大多数元素的值都是0 删除null终止数组的行。变量i已经计算了输入的元素数,因此迭代并打印直到您打印i个元素。当您的
删除null终止数组的行。变量i已经计算了输入的元素数,所以迭代并打印,直到打印i元素。具有char类型的数组用于存储整数,数组不是字符串。因为存储的是除以2的余数,所以大多数元素的值都是0
删除null终止数组的行。变量i已经计算了输入的元素数,因此迭代并打印直到您打印i个元素。当您的输入是偶数,如
12
,则要存储的第一个数字是0
,这实际上意味着NULL
,因为定义的数组是字符数组
这就是为什么输入为偶数时不会打印任何内容
以下是您可以做的:
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
}
#包括
int main(){
int n,i=0,c1,c2;
字符a[1000];
scanf(“%d”和“&n”);
而(n!=0)
{
a[i]=“0”+n%2;//注意这里
//printf(“%d”,a[i]);//此选项正确打印值
n=n/2;
i++;
}
a[i]='\0';
对于(i=0;a[i]!='\0';i++)
printf(“%c”,a[i]);
}
当您的输入是偶数,如12
,则要存储的第一个数字是0
,这实际上意味着NULL
,因为定义的数组是字符数组
这就是为什么输入为偶数时不会打印任何内容
以下是您可以做的:
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
}
#包括
int main(){
int n,i=0,c1,c2;
字符a[1000];
scanf(“%d”和“&n”);
而(n!=0)
{
a[i]=“0”+n%2;//注意这里
//printf(“%d”,a[i]);//此选项正确打印值
n=n/2;
i++;
}
a[i]='\0';
对于(i=0;a[i]!='\0';i++)
printf(“%c”,a[i]);
}
首先使用[i]=n%2,n是一个整数值,因此发生的情况是:n=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]='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]);
}
#包括
int main(){
int n,i=0,c1,c2;
字符a[1000];
scanf(“%d”和“&n”);
而(n!=0)
{
a[i]=n%2;
printf(“%d\t%d\t%c\n”,a[i],i,a[i]);//这可以正确打印值
n=n/2;
i++;
}
printf(“%d\n”,i);
a[i]='\0';
printf(“%d\t%d\n”,a[i],i);
对于(i=0;a[i]!='\0';i++)
printf(“%d\t%d\n”,a[i],i);//只打印数组的第一个元素
}
样本运行:-
我还建议,在发布此类愚蠢错误之前,尝试在循环内使用printf进行调试,并在得出任何结论之前执行干运行。首先使用[I]=n%2,n是一个整数值,因此发生的情况是,假设n=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]='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]);
}
#包括
int main(){
int n,i=0,c1,c2;
字符a[1000];
scanf(“%d”和“&n”);
而(n!=0)
{
a[i]=n%2;
printf(“%d\t%d\t%c\n”,a[i],i,a[i]);//这可以正确打印值
n=n/2;
i++;
}
printf(“%d\n”,i);
a[i]='\0';
printf(“%d\t%d\n”,a[i],i);
对于(i=0;a[i]!='\0';i++)
printf(“%d\t%d\n”,a[i],i);//只打印数组的第一个元素
}
样本运行:-
我还建议,在发布此类愚蠢错误之前,尝试在循环中使用printf进行调试,并在得出任何结论之前执行干运行。
a[I]!='\0'
是a[i]!=0
那么如何避免这种情况?我不能使用strlen(a)函数,它给垃圾值一个字节(在之后,int countBit=I;
),然后I
(for(I=0;I A[i]='\' 0 /<代码>是<代码> A[i]!=0
那么我该如何避免呢?我不能使用strlen(a)函数,它会给出垃圾值unt位(在之后,int countBit=i;
),然后i
(for(i=0;i'1',0'
。是的。还有一件事,为什么使用strlen会给出错误的字符串长度?@Khacho,因为数组不是用作字符串的。如果要存储整数,请使用int或有符号或无符号字符。如果要存储字符串,请存储字符:'1',0'
。谢谢帮助谢谢帮助