我有一个非常基本的疑问。我试图将任何无效的十六进制数字存储在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
仅在默认情况下会寻求十六进制输入。您可以通过检查scanf的返回值来检查物品是否被成功消耗。
if(scanf("%X",&a) != 1) {
fprintf(stderr, "Error occurred at scanning");
}
当控制台要求输入时,我输入了
G
。输出为63
。是只是未定义的行为,还是该输出背后有一些逻辑。
由于a
未初始化,并且在scanf()
调用中没有成功分配了合理的十六进制值的消耗,因此它仍然包含垃圾值。打印该值会调用确实未定义的行为。