0

各位程序员,您好,

我可能想问你,

我的大学有一项任务将十进制数字(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;
}

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

我真的很挣扎,不知道如何进行或使其工作

你能给我一些关于它如何工作的例子或一些如何让它工作的好建议吗?

我真的很感激

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

4

1 回答 1

0

您使用了错误的格式说明符来printf.

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

您想%d改用,用于输出int

printf("%d%d%d%d", (n/8)%2, (n/4)%2, (n/2)%2, n%2);
于 2016-04-26T21:01:38.137 回答