C语言 如果输入是字符,为什么此代码输出 64


#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。为什么会这样?

这将调用未定义的行为。

如果scanf()发生匹配失败("X"不是%d的匹配),提供的参数将保持未赋值状态,并且由于参数是未初始化的局部变量,因此该值保持不确定。

相关,来自C11,章节§7.21.6.2

[...]如果 输入项不是匹配序列,指令执行失败:这 条件是匹配失败。[...]

尝试使用该值将调用 UB。来自C11附件J.2,未定义的行为

具有自动存储持续时间的对象的值在 定。

因此,您应该始终

  1. 初始化局部变量
  2. 检查 scanf() 的返回值。

最新更新