当数据类型为 unsigned char 时 scanf 的行为存在问题

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,但如果输入是数字,那么它会正常工作。

Adr*_*ica 5

您是正确的,%hhu格式说明符需要一个unsigned char*参数。然而,u格式的一部分规定输入被解释为十进制整数。要将数据作为(未处理的)字符输入,您应该使用%c格式说明符。