Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中打印字符数组中的整数_C - Fatal编程技术网

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

在c中打印字符数组中的整数,c,C,我错过了什么?为什么我不能循环并打印字符数组的值,尽管当我尝试在while loop中打印它时它可以工作?该数组具有char类型,用于存储整数,数组不是字符串。因为存储的是除以2的余数,所以大多数元素的值都是0 删除null终止数组的行。变量i已经计算了输入的元素数,所以迭代并打印,直到打印i元素。具有char类型的数组用于存储整数,数组不是字符串。因为存储的是除以2的余数,所以大多数元素的值都是0 删除null终止数组的行。变量i已经计算了输入的元素数,因此迭代并打印直到您打印i个元素。当您的

我错过了什么?为什么我不能循环并打印字符数组的值,尽管当我尝试在while loop中打印它时它可以工作?

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


删除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'
。谢谢帮助谢谢帮助