scanf("%X",&a);
%X
будет искать только шестнадцатеричный ввод. Если вы введете G
, директива потерпит неудачу, и присвоение a
не произойдет. В этом случае scanf()
возвращает 0
, которое указывает количество успешно использованных элементов.
Необходимо проверить, все ли элементы были успешно использованы, проверив возвращаемое значение scanf()
:
if(scanf("%X",&a) != 1) {
fprintf(stderr, "Error occurred at scanning hexadecimal input!");
}
"Когда консоль запрашивает ввод, я ввел G
. Она выдала вывод как 63
. Это просто неопределенное поведение или за этим стоит какая-то логика c output? "
Поскольку a
неинициализирован:
int a;
, и при вызове scanf()
не было успешно выполнено потребление, которое назначило бы разумное значение в a
, a
по-прежнему содержит значение мусора, поскольку оно является объектом с продолжительностью хранения auto
mati c по умолчанию.
Чтобы напечатать это значение мусора, вызовет действительно неопределенное поведение.