我是C的新手。 我正在编写一个程序来打印从0到给定数字的所有十进制数字(由用户提供),但我的输出不是我所期望的。我不明白我写的程序中有什么错误....
#include <stdio.h>
int main()
{
int x,n;
printf("Enter any number\n");
scanf("%d",&x);
n=x;
printf("numbers in binary format\n");
while(n!=0)
{
int num[8]={0,0,0,0,0,0,0,0};
int y[8]={0,0,0,0,0,0,0,0};
int i=7;
while(x!=0)
{
y[i]=x%2;
x=x/2;
i=i-1;
}
while(i!=8)
{
printf("%d",y[i]);
i=i+1;
}
printf("\n");
n=n-1;
}
}
答案 0 :(得分:1)
您只是忘了在while循环中设置x
的值,这是代码:
#include <stdio.h>
int main()
{
int x,n;
printf("Enter any number\n");
scanf("%d",&x);
n=x;
printf("numbers in binary format\n");
while(n!=0)
{
x=n;
int y[8]={0,0,0,0,0,0,0,0};
int i=7;
while(x!=0)
{
y[i]=x%2;
x=x/2;
i=i-1;
}
i=0;
while(i!=8)
{
printf("%d",y[i]);
i=i+1;
}
printf("\n");
n=n-1;
}
}
我必须补充说,变量num
未被使用。
答案 1 :(得分:1)
问题在于你的第一个循环
while(x!=0)
{
y[i]=x%2;
x=x/2;
i=i-1;
}
当这个循环结束时,你的i在大多数情况下不为0,你的第二个while循环基于这个假设。
刚刚放了一个
i = 0;
第一次循环后。它应该工作。
答案 2 :(得分:0)
试试这个简单的方法 -
printf("numbers in binary format\n");
for(n=0;n<=x;n++) // this loop will print the number 0 to x in binary format.
{
for(i=31;i>=0;i--) // this is for 32 bit integer. if you are using 16 bit integer make i=15 in initialization.
{
if(n&(1<<i))
printf("1");
else
printf("0");
}
printf("\n");
}
答案 3 :(得分:0)
值i在第一个循环中递减,并且在循环后不会重置为0。 请设置
循环后i = 0,它应该可以工作。
答案 4 :(得分:0)
要从unsigned int
(仅0或正数)转换为相应的字符串表示,您可以这样做:
char *bin(unsigned int number, char *result)
{
unsigned int mask = 1 << ((sizeof(unsigned int) * 8) - 1);
int i;
for (i = 0; i < sizeof(unsigned int) * 8; i++)
{
if (number & mask)
{
result[i] = '1';
}
else
{
result[i] = '0';
}
number <<= 1;
}
result[i]='\0'; //Terminate the string
return result;
}
在开始时,它创建mask
作为一个全数为零的数字,除了最重要的位。
然后它使用要转换的数字的最高位执行该掩码的二进制结束,并将0
或1
放入字符串中。
然后它将数字转换为转换,以便最高位丢失,第二个最重要的位置现在是最重要的,并继续直到数字完全转换为字符串。
最后它终止了字符串。
您可以这样称呼它:
int main()
{
int i, to;
printf("Enter any number\n");
scanf("%d", &to);
char *result = calloc((sizeof(unsigned int) * 8) + 1, sizeof(char));
for (i = 0; i <= to; i++)
{
printf("%s\n", bin(i, result));
}
free(result);
return 0;
}