C 什么也没印

C 什么也没印,c,C,这就是我在思考转换过程时想到的逻辑 将二进制数转换成十进制数。我似乎不知道这个程序有什么问题,它阻止它显示任何类型的输出 #include <stdio.h> #include <stdlib.h> int main() { int n,temp,r,rev,i, ct; rev=0; printf("Enter a number in base 10"); scanf("%d", &n); // n is the dec

这就是我在思考转换过程时想到的逻辑 将二进制数转换成十进制数。我似乎不知道这个程序有什么问题,它阻止它显示任何类型的输出

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,temp,r,rev,i, ct;
    rev=0;
    printf("Enter a number in base 10");
    scanf("%d", &n);
    // n is the decimal number
    temp=n;
    while(temp>0)
    {
        r=temp%2;

        if (r==1)
            break;
        else
            ct++;
         temp/=2;
        // ct will count the number of zeros from the top
    }
    while(temp>0)
    {
        r=temp%2;
        rev=(rev*10 + r);
    }
    printf("%d", rev);

    for(i=0;i<ct;i++)
    {
        printf("%i", 0);
    }

    return 0;
}  
#包括
#包括
int main()
{
内部n、温度r、版本i、ct;
rev=0;
printf(“在基数10中输入一个数字”);
scanf(“%d”和“&n”);
//n是十进制数
温度=n;
而(温度>0)
{
r=温度%2;
如果(r==1)
打破
其他的
ct++;
温度/=2;
//ct将从顶部开始计算零的数量
}
而(温度>0)
{
r=温度%2;
rev=(rev*10+r);
}
printf(“%d”,版次);

对于(i=0;i您的代码有多个问题:

1)
ct
是未初始化的变量。请将其初始化为0

2) 在单循环中计算二进制的部分需要
temp=temp/2
来计算二进制中的下一个数字

while(temp>0)
{
    r=temp%2;
    rev=(rev*10 + r);
    temp/=2;   // You need this
}

3) 当您使用整数变量(
rev
)表示二进制数时,您的程序只能处理一组非常小的整数。即使输入2047这样的小数字,您也会遇到整数溢出(取决于您的平台上二进制的LSB是否为1和
INT_MAX
).

坐在笔和纸的旁边,假设输入是一个小数字(例如
n=4
)然后看看你的程序做了什么。祝你好运!你试过调试它吗?当你一步一步地调试代码时它在做什么?需要刷新标准输出吗?你的代码中有未定义的行为:你声明变量
ct
,但你从未初始化它。这意味着它的值是不确定的(并且看起来是随机的)。使用未初始化的局部变量会导致此未定义的行为。在修复此未定义的行为之前,即使没有编译器错误,您的程序也是不正确的。如果在生成时启用了更多警告,您将很容易发现这一点,因为警告通常表示“怪异”可能导致未定义行为的事情。并且您永远不会退出第二个while循环。