我正在尝试编写一个程序,如果%2 ^ j = 0,则它打印1,否则它打印0,因此最后我得到了16位二进制代码。但是我没有收到任何错误,并且在输入输入数字(a)之后,终端崩溃了。 谢谢您的帮助。
#include <math.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
uint16_t a, j, b, mod;
printf(" Please insert a number between 0 and 65535 \n ");
scanf("%d", &a);
j = 16;
while (j > 0)
;
{
b = pow(j, 2);
mod = a % b;
if (mod == 0) {
printf("%d", 1);
} else {
printf("%d", 0);
}
j = j - 1;
}
return 0;
}
答案 0 :(得分:4)
在undefined behavior中使用%d
格式时,您拥有scanf
。该格式说明符期望参数为指向int
的指针。
格式说明符和参数类型不匹配会导致UB。
对于uint16_t
,请使用宏SCNu16
(如this reference中所述):
scanf("%" SCNu16, &a);