为什么打印x
总是等于零?
#include <stdio.h>
int main()
{
unsigned char num, x, nnum, y = 0;
printf("please enter the number of bits u want to clear \n");
scanf("%d%d", &x, &y);
printf("%d%d", x, y);
return 0;
}
我尝试将它们分开放置,但是在从y
中获取变量后,x
变为零。
我知道它们最终将存储在堆栈中,每个char
都是1字节,因此在打印它们时
它们都应该具有我所赋予的价值。
答案 0 :(得分:3)
在您的代码中,
scanf("%d%d",&x,&y);
是undefined behavior。转换说明符和提供的参数不匹配。对于scanf()
系列,%d
希望使用指向有符号整数的指针类型的参数,而您要提供指向无符号char
的指针。
您需要使用
scanf("%hhu%hhu",&x,&y);
答案 1 :(得分:0)
字符的格式说明符为%c。使用%d会导致未定义的行为(覆盖堆栈中的下一个变量)。
如果要使用8位无符号整数,请使用uint8_t(stdint.h)以及inttypes.h中的SCNu8和PRIu8宏。
答案 2 :(得分:-1)
数据类型为char,因此char的scanf基本上为%c。您要么将其变量分开。如果您的x是一个字符,则需要分开到下一行。整数的scanf是%d。