为什么 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.
我正在使用 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.