试图在 int 变量中存储无效的十六进制数

Trying to store invalid hexadecimal number in int variable

我有一个非常基本的疑问。我试图将任何无效的十六进制数存储在一个 int 变量中。我所说的无效数字是指使用不在 A-F 范围内的字母表的数字。例如看这个程序:

#include<stdio.h>
int main()
{
    int a;
    scanf("%X",&a);
    printf("%d",a);
    return 0;
}

当控制台要求输入时,我输入了G。它给出的输出为 63。它只是未定义的行为还是此输出背后有一些逻辑。对于大多数此类输入,输出结果为 63。目前致力于 GCC。

 scanf("%X",&a);

%X 将只寻找十六进制输入。如果您输入 G 指令将失败,并且不会对 a 进行赋值。本例scanf()returns0,指定成功消费的物品数

您应该通过检查 scanf():

的 return 值来检查是否所有项目都已成功消耗
if(scanf("%X",&a) != 1) {
    fprintf(stderr, "Error occurred at scanning hexadecimal input!");
}

"When console asks for input, I entered G. It gave the output as 63. Is it just undefined behaviour or is there some logic behind this output?"

由于 a 未初始化:

int a;

并且在 scanf() 调用中没有成功消费,它会为 a 分配一个合理的值,a 仍然包含垃圾值,因为它是默认存储时间 automatic。

打印这个垃圾值确实调用了未定义的行为。