为什么 scanf 将第一个值设置为 0?

Why does scanf set the first value to 0?

我正在使用 scanf 获取输入。但是当我 运行 这个代码时:

#include<stdio.h>

int main(){
  unsigned char in,b;
  scanf("%u %u",&in,&b);
  printf("%u %u\n",in,b);
  return 0;
}

例如,当我输入 12 3 时,输出是 0 3.

当我将 scanf("%u %u",&in,&b); 写成 scanf("%u",&in);scanf("%u",&b);.

时也会发生这种情况

感谢您与我们联系。

本次调用scanf

unsigned char in,b;
scanf("%u %u",&in,&b);

调用未定义的行为,因为该函数期望它的第二个和第三个参数是指向类型 unsigned int 的对象的指针,而实际上它们是指向类型 unsigned char.[=17= 的对象的指针]

相反,您必须使用长度修饰符 hh 和转换说明符 u

scanf("%hhu %hhu",&in,&b);

来自C标准(7.21.6.2 fscanf函数)

11 The length modifiers and their meanings are:

hh Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to signed char or unsigned char.