半位数字转换器
Nibble half digit converter
各位程序员大家好,
我可能想问你,
我的大学有一项任务是转换十进制数字 (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);
各位程序员大家好,
我可能想问你,
我的大学有一项任务是转换十进制数字 (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);