【问题标题】:c format input to binary and then outputc 将输入格式化为二进制然后输出
【发布时间】:2021-11-20 16:31:23
【问题描述】:

我想使用以下代码获取用户输入:

uint32_t value;
printf("value: ");
scanf("%"SCNu32, &value);

我现在的问题是,我将如何使用用户输入(在我的情况下为值),然后将其格式化为二进制数,而函数 print_binary 中没有循环?输出必须是 0b 之后的 32 位。我不能在任何地方使用任何类型的循环。

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

void print_binary(uint32_t value){

    printf("%d = 0b",value);
    //I want to print the variable value with a fixed length of 32 and that it is 
    //binary with the starting index of 0bBinaryValueOfNumber.
    return;
}

int main(void) {
    uint32_t value;
    printf("value: ");
    if (scanf("%"SCNu32, &value) != 1) {
        fprintf(stderr, "ERROR: While reading the 'uint32_t' value an error occurred!");
        return EXIT_FAILURE;
    }
    printf("\n");
    print_binary(value);
    printf("\n");
    return EXIT_SUCCESS;
}

我也有以下例子:

如果用户输入为 5,则函数应返回“5 = 0b00000000000000000000000000000101”。

【问题讨论】:

  • 感谢您的快速解决方案,不幸的是,我不允许使用 for 循环或 while 循环。还有其他可能吗?
  • sry 现在做了编辑,我的错。

标签: c formatting


【解决方案1】:

如果你不能使用循环,你可以使用递归:

void print_bin(uint32_t n, int digits) {
    if (digits > 1) print_bin(n >> 1, digits - 1);
    putchar('0' + (n & 1));
}

void print_binary(uint32_t value) {
    printf("%d = 0b", value);
    print_bin(value, 32);
    printf("\n");
}

使用尾递归的替代方法:

void print_bin(uint32_t n, int digits) {
    putchar('0' + ((n >>-- digits) & 1));
    if (digits > 0) print_bin(n, digits);
}

【讨论】:

  • 有趣的&gt;&gt;--“操作员”。
  • @chux-ReinstateMonica:一个危险的:从blowgun 发射的有毒飞镖。在很多地方都是非法的,但在France不是@
  • 现在我在想,C 中最长的“运算符”是什么? n --&gt;&gt;-- digits 是 6。嗯。
猜你喜欢
  • 2020-10-01
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
相关资源
最近更新 更多