You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C语言整数转二进制:树莓派环境下命令行参数程序咨询

针对树莓派的十进制转4位二进制C程序实现

看起来你已经搭好了递归转二进制的核心逻辑,我来帮你补全整个程序的参数校验与完整流程,确保它在树莓派上能稳定运行:

完整可运行代码

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

// 递归实现十进制转二进制
int convert(int dec) {
    if (dec == 0) {
        return 0;
    } else {
        return (dec % 2 + 10 * convert(dec / 2));
    }
}

// 辅助函数:检查输入字符串是否为纯数字
int is_valid_number(const char *str) {
    if (*str == '\0') return 0;
    while (*str) {
        if (!isdigit((unsigned char)*str)) {
            return 0;
        }
        str++;
    }
    return 1;
}

int main(int argc, char *argv[]) {
    // 校验命令行参数数量
    if (argc != 2) {
        fprintf(stderr, "错误:请传入一个参数!用法:%s <0-15之间的整数>\n", argv[0]);
        return EXIT_FAILURE;
    }

    // 校验参数是否为有效数字
    if (!is_valid_number(argv[1])) {
        fprintf(stderr, "错误:参数必须是0-15之间的整数!\n");
        return EXIT_FAILURE;
    }

    int input_num = atoi(argv[1]);

    // 校验数字范围是否符合要求
    if (input_num < 0 || input_num > 15) {
        fprintf(stderr, "错误:数字必须处于0到15之间!\n");
        return EXIT_FAILURE;
    }

    // 转换并格式化输出(补前导零到4位,符合0-15的二进制位数)
    int binary_result = convert(input_num);
    printf("十进制%d对应的4位二进制是:%04d\n", input_num, binary_result);

    return EXIT_SUCCESS;
}

关键细节说明

  • 参数校验环节
    • 先检查argc是否为2,确保用户只传入一个目标数字
    • is_valid_number过滤非数字输入,避免atoi转换时产生意外结果
    • 严格校验数字范围在0-15之间,符合你的需求
  • 二进制输出优化
    你的递归转换逻辑是可行的,但对于0-3这类小数字,转换结果只有1-2位,用%04d格式化输出可以自动补全前导零,保证输出是标准的4位二进制(比如输入3会输出0011而非11
  • 树莓派编译运行
    这是标准C代码,直接在树莓派终端用gcc编译即可:
    gcc binary_convert.c -o binary_convert
    ./binary_convert 9
    

可选优化方案

如果觉得递归不够直观,也可以用循环实现二进制转换,输出逻辑更可控:

void convert_with_loop(int dec) {
    int bits[4] = {0}; // 0-15最多4位二进制,初始化数组存每一位
    int index = 3;
    while (dec > 0 && index >= 0) {
        bits[index] = dec % 2;
        dec /= 2;
        index--;
    }
    // 逐位输出4位二进制
    for (int i = 0; i < 4; i++) {
        printf("%d", bits[i]);
    }
    printf("\n");
}

把main函数里的输出部分换成调用这个函数,就能得到同样的效果,递归和循环版本各有优劣,看你个人偏好。

内容的提问来源于stack exchange,提问作者S. N

火山引擎 最新活动