我尝试通过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-core(gcc-5.1.0-tdm-1-core)
binutils(binutils-2.24-1-mingw32-bin)
mingwrt(mingwrt-3.20-2-mingw32-dev,mingwrt-3.20-2-mingw32-dll)
w32api(w32api-3.17-2-mingw32-dev)
附:使用%hu
或%u
没有区别。
hh
大小修饰符。 - Jonathan Leffler%hhu
,但我没有Windows安装在面前,所以我无法测试。你可以尝试在second
中写入65535,看看是否对两个变量都打印出255。如果是这样,结论就是你不能在Windows上使用scanf
(或任何其它变体)读取unsigned char
值。 - zneak