c - 为什么 scanf 会用 0 覆盖之前读取的 unsigned char 变量?

标签 c windows scanf mingw unsigned-char

我尝试通过 scanf 读取几个 unsigned char 值,发现了一些奇怪的错误。在 scanf 的第二次调用期间,第一个 unsigned char 变量被 0 覆盖。但是编写 scanf("%hhu", &second); 将导致覆盖第二个 unsigned char 变量。

#include <stdio.h>

int main(void){
    unsigned char first, second;
    printf("Type first unsigned char variable: ");
    scanf("%hhu", &first);
    printf("first = %hhu\n", first);
    printf("Type second unsigned char variable: ");
    scanf("%hhu", &second);
    printf("first = %hhu\n", first);
    printf("second = %hhu\n", second);
    return 0;
}

编译器详细信息:

gcc-核心 (gcc-5.1.0-tdm-1-核心)

binutils (binutils-2.24-1-mingw32-bin)

mingwrt (mingwrt-3.20-2-mingw32-dev, mingwrt-3.20-2-mingw32-dl​​l)

w32api (w32api-3.17-2-mingw32-dev)

附言使用 %hu%u 没有区别。

最佳答案

您的 MinGW 版本似乎有问题。

相反,您可以使用 mingw-w64 .该项目 fork 的部分原因是原始项目不愿意修复这样的错误,更愿意责怪其他方。

使用该编译器后,使用 -D__USE_MINGW_ANSI_STDIO 编译器开关以获取一致模式(不幸的是,它仍然默认为 Microsoft 兼容模式)。

关于c - 为什么 scanf 会用 0 覆盖之前读取的 unsigned char 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54755840/

相关文章:

C 编程 ScanF 多输入一文件

c - 将文件中的数字以 6 为一组读取到 2x3 矩阵中?

python - Unicode解码错误: 'utf-8' can't decode byte

c - 判断页面是否在内存中?

c - c中的动态数组

windows - Windows 10 任务管理器如何检测虚拟机?

c - 如何使用C从键盘读取字符串?

c - 有人请解释一下 c 中的字符串吗?

c++ - Windows fnmatch 替代品

java - 如何在 Windows 和 Mac 上为 Java 应用程序设置正确的字体?