这是第一个代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
short int a;
unsigned short int l;
scanf("%d%u",&a,&l);
printf("%d %u",a,l);
return 0;
}
如果我给出输入(可能是任何其他输入)
5
9
输出
0 9
第二个代码是
#include <stdio.h>
#include <stdlib.h>
int main()
{
short int a;
unsigned short int l;
scanf("%u%d",&l,&a);
printf("%d %u",a,l);
return 0;
}
如果我给出输出(可能是任何其他输入)
9
5
输出
5 9
为什么scanf("%d%u",&a,&l);
不起作用且scanf("%u%d",&l,&a);
有效?
答案 0 :(得分:3)
对数据类型使用错误的说明符会调用undefined behavior。结果可能是预期的或意外的。
(p9)如果转换规范无效,则行为未定义.282)如果任何参数不是相应转换规范的正确类型,则行为为 未定义。
和约h
:p(7)
h
指定以下d, i, o, u, x
或X
转换说明符适用于short int
或unsigned short int
参数(参数将根据整数提升进行提升,但在打印前其值应转换为short int
或unsigned short int
);或者后面的n转换说明符适用于指向short int
参数的指针。
在h
前使用%d
,在%u
类型数据中使用short
。
scanf("%hd %hu",&a,&l);
printf("%hd %hu",a,l);