202272390 发表于 2020-10-5 10:43:40

求助

#include<stdio.h>
#include<math.h>
int main()
{
    int a,b,c,i;
    printf("输入十进制数字:");
    scanf("%d",&a);
    for (i=0;a>=pow(2,i);i++)
    {}
    c=i-1;
    char j;
    for(b=0;c>=0;b++,c--)
    {
      if(a>=pow(2,c))
      {
            a=a-pow(2,c);
            j='1';
      }
      else
      {
            j='0';
      }
    }
    printf("二进制是:%s\n",j);
    return 0;
}


求助 为何结果后面会有乱码
是因为 i 的值太小吗   疑惑中

巴巴鲁 发表于 2020-10-5 12:08:33

我用你的代码输出是正常的,很奇怪
#include<stdio.h>
#include<math.h>
int main()
{
    int a,b,c,i;
    printf("输入十进制数字:");
    scanf("%d",&a);
    for (i=0;a>=pow(2,i);i++)
    {}
    c=i-1;
    char j;
    for(b=0;c>=0;b++,c--)
    {
      if(a>=pow(2,c))
      {
            a=a-pow(2,c);
            j='1';
      }
      else
      {
            j='0';
      }
    }
    j = '\0'; // 加上这一句试试看
    printf("二进制是:%s\n",j);
    return 0;
}

202272390 发表于 2020-10-5 13:10:50

巴巴鲁 发表于 2020-10-5 12:08
我用你的代码输出是正常的,很奇怪

加上那句确实正常了但有点疑惑就j='\0' 后不是超出字符的定义范围了吗
比如 输入6i就是3循环结束b也是3那就是char a第四位是\0
是不是得改成char a;
但char a为什么会一样呢?

巴巴鲁 发表于 2020-10-5 18:05:03

202272390 发表于 2020-10-5 13:10
加上那句确实正常了但有点疑惑就j='\0' 后不是超出字符的定义范围了吗
比如 输入6i就是3循环 ...

这就不清楚了,
不过你不要说我还真没注意到越界了,用吧
页: [1]
查看完整版本: 求助