首页 > 解决方案 > 在多行中打印函数的返回

问题描述

我正在学习 C,目前正在做一个练习,我需要将十进制输入转换为二进制,我能够编写一个函数,成功地将输入的十进制转换为二进制,但问题要求每行打印一个数字,例如,“17”的转换为“10001”,但问题希望数字每行打印一个数字,而不是一行。

这是我的代码:

#include <stdio.h>

int convert(int dec){
    
    if (dec > 0) {
        return (dec % 2 + 10 * convert(dec / 2));
    } else {
        return 0;
    }
}

int main(int argc, const char * argv[]) {
    
    int dec;
    
    printf("Type a decimal number: ");
    scanf("%d", &dec);
    
    
    printf("%d\n", convert(dec));
    
    return 0;
}

如果我输入30我的当前输出是

11110

但我希望我的输出是

1
1
1
1
0

我应该怎么办?

标签: cterminalprintf

解决方案


无需将二进制结果转换为另一个整数,只需打印它们即可。

#include <stdio.h>

void convert(int dec)
{
    if (dec > 0) {
        convert(dec / 2);
        printf("%d\n", dec % 2);
    }
}

int main(void)
{
    int dec;

    printf("Type a decimal number: ");
    if (scanf("%d", &dec) == 1) {
        convert(dec);
    }
}

与您的原始实现相比,这对整数溢出也更安全。

注意:如果输入是一个非常大的数字(例如,考虑一个具有一百万位数字的数字),这可能会导致堆栈溢出。但是如果你要处理这样的数字,你不能int从一开始就使用,而必须采取不同的方法。


推荐阅读