Aar*_*GAT 0 c scanf unsigned-char
所以我不知道为什么会观察到这种行为:
#include <stdio.h>
int main()
{
unsigned char c;
char d;
scanf("%hhu", &d);
printf("%c\n", d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话%hhu是为了unsigned char。如果我输入几乎任何字符,例如a, 或者b答案是什么都没有并d获取值0。但如果我输入97然后d打印该值a(因此 ASCII 会转换为字符)。当数据类型为 时,情况显然并非如此char。我可以直接输入字符并存储它。
也在这段代码中稍加修改
#include <stdio.h>
int main()
{
unsigned char c;
char d;
int g;
scanf("%hhu", &d);
printf("%c\n", d);
scanf("%d", &g);
printf("%d is g\n", g);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我将第一个输入作为字符,例如wora那么它只会跳过第二个输入scanf,但如果输入是数字,那么它会正常工作。
您是正确的,%hhu格式说明符需要一个unsigned char*参数。然而,u格式的一部分规定输入被解释为十进制整数。要将数据作为(未处理的)字符输入,您应该使用%c格式说明符。