" Что происходит, когда спецификатор формата %d
используется в scanf()
для чтения символа с клавиатуры? "
Фактический C стандарт (C18), Раздел 7.21.6.2/10 - «Функция fscanf» сообщает:
" Если входной элемент не совпадает с последовательностью, выполнение директивы завершается неудачей: это условие является ошибкой сопоставления."
Таким образом, выполнение директивы в предоставленном вами случае должно завершиться неудачей, так как вы ввели символ, и никакое значение не должно быть записано в number
из этого конкретный scanf()
звонок.
Всегда проверяйте возвращаемое значение scanf()
, которое указывает, сколько элементов ввода было назначено успешно или иначе равно EOF
, если сбой ввода произошел до завершения первого преобразования.
"Однако, когда я намеренно вводю алфавиты, я получаю вывод как 0, а когда я вводю любые другие символы, я получаю вывод как 53. Может кто-нибудь объяснить, почему это происходит?"
Причина, по которой он печатает произвольные числа, заключается в том, что вы не инициализировали number
ни с каким значением:
int number;
Поскольку number
является объектом класса хранения auto
по умолчанию, оно содержит случайное значение мусора, которое затем печатается printf()
. Он не имеет ничего общего с вызовом scanf()
как есть.
Таким образом, если вы инициализируете number
с допустимым значением в его определении, например, fe int number = 24;
Я уверен, что вывод программа будет 24
при вводе символов.