【问题标题】:Nibble half digit converter半字节转换器
【发布时间】:2016-08-20 21:52:48
【问题描述】:

各位程序员大家好,

我可能想问你,

我的大学有一项任务是转换十进制数字 (0-9) 到半位(nibble = 0101 ie.)限制是我们不能使用 if 语句

所以我尝试了一点,就这么远了

int main()
{
    int n;

    printf("type in your digit");
    scanf("%d", &n );
    printf("%n%n%n%n", (n/8)%2, (n/4)%2, (n/2)%2, n%2);

    return 0;
}

我的问题是我不能输入一个数字,如果我这样做程序崩溃了

我真的很挣扎,不知道如何继续或让它发挥作用

你能给我一些例子来说明它是如何工作的吗 或一些好的建议如何让它发挥作用。

我会很感激的

非常感谢您的帮助和回答!

【问题讨论】:

  • %n 不会像您认为的那样做。阅读printf 的文档。
  • 将 ascii 数字转换为 nibble 使用:char nibble = digit - '0'; 'nibble' 中的结果值将在 0x00 到 0x09 的范围内。打印单个位:printf( "%i%i%i%i", ((nibble>>3)&1)+'0', ((nibble>>2)&1)+'0', ((nibble>>1)&1)+'0', (nibble&1)+'0' );

标签: c converter nibble


【解决方案1】:

您对printf 使用了错误的格式说明符。

%n 格式说明符需要 int * 并将目前写入的字符数写入给定的内存地址。因为您将int 传递给期望int * 的参数,所以printf 将该数字解释为内存地址并尝试写入它。这是未定义的行为,很可能会导致核心转储。

你想用%d代替,用来输出int

printf("%d%d%d%d", (n/8)%2, (n/4)%2, (n/2)%2, n%2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多