c - 半字节半数转换器

标签 c converters nibble

各位程序员大家好,

我可能想问你,

我的大学有一项任务要转换十进制数字 (0-9) 到半位(半字节 = 0101 即。)限制是我们不能使用 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;
}

我的问题是我无法输入数字,如果这样做程序就会崩溃

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

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

我真的很感激

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

最佳答案

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

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

您想使用%d代替,用于输出int:

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

关于c - 半字节半数转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36875600/

相关文章:

c - 如何为 32 位 iOS 编译 Vim 8

c - 为什么我在下面的 C 程序中没有得到预期的输出?

c# - 无法转换为类型 System.IConvertible

regex - bash: oneliner 将输出中的十六进制数转换为十进制数

java - 如何将 @RequestParam Map<String, String> 转换为自定义 Map<>

C 和 Nasm64 组合 - 堆栈对齐、尾声、序言 - OSX 64

c - 将两个以上的 "struct"写入文件的问题,然后读取文件

python - 尝试将字节数组中的字节拆分为两个半字节

.net - 是否有小于字节的 .NET 数据类型?