#include <stdio.h>
#include <stdlib.h>
//A simple program that asks for an integer and prints it back out.
int main()
{
int a;
printf("Type an integer: ");
scanf("%d",&a);
printf("The integer you typed is: %d",a);
}
如果用户键入X
等字符,则由于某种原因输出将始终为64。为什么会这样?
答案 0 :(得分:9)
这会调用undefined behavior。
如果scanf()
发生匹配失败(“X”不匹配%d
),则提供的参数保持未分配状态,并且由于参数是未初始化的局部变量,因此值仍然存在不确定的。
相关,来自C11
,章节§7.21.6.2
[...]如果 输入项不是匹配的序列,指令的执行失败:这 条件是匹配失败。 [...]
尝试使用该值会调用UB。来自C11
附件J.2,未定义的行为
使用具有自动存储持续时间的对象的值 不确定的。
因此,你应该总是
scanf()
。