Почему выход «4»? , В то время как вход 'A'Использовать scanf in if statement
int main() { int a = 5;
if(scanf("%d",&a))
printf("%d",a+1);
else
printf("%d",a-1);
}
Почему выход «4»? , В то время как вход 'A'Использовать scanf in if statement
int main() { int a = 5;
if(scanf("%d",&a))
printf("%d",a+1);
else
printf("%d",a-1);
}
Вы поручили scanf
читать целое число. Ввод даже не начинался со знака или цифры, поэтому scanf
не нашел знаковых целых чисел, поэтому scanf
вернулся 0
(количество введенных элементов успешно согласовано и присвоено), отбрасывая вас в пункт . Поскольку scanf
ничего не сопоставлял, он ничего не назначал, то есть a
не был изменен, а a-1
- 4
.
Вы не указали, что ожидали, поэтому я не знаю, что исправить.
Когда используется тип sepcifier %d
, тогда функция ожидает, что будет введено допустимое целое число с десятичной запятой. Очевидно, что символ 'A'
не является числом, поэтому вход не удался.
Теперь возникает вопрос: какова будет функция в этом случае?
Согласно описанию функции scanf
(С Standard, 7.21.6.4 Функции Scanf):
3 Функции зсапа возвращает значение макро EOF, если сбой ввода происходит перед первым конверсия (если таковая имеется) завершена. В противном случае функция scanf возвращает количество введенных позиций , которое может быть меньше, чем предусмотрено, или даже ноль в событии раннего совпадения.
Так условие в, если заявление
if(scanf("%d",&a))
оценивали на 0 (ложь) и утверждение еще было выполнено.
else
printf("%d",a-1);
что outputed 4.
Примите во внимание, что в общем случае вы можете ввести символ 'A'
для целых чисел. Но в этом случае соответствующее число переменная должна быть объявлена как unsigned
и спецификатора формата из scanf
должен, чтобы быть %x
Например
#include <stdio.h>
int main(void)
{
unsigned int a = 5;
if (scanf("%x", &a))
{
printf("%u\n", a + 1);
}
else
{
printf("%u\n", a - 1);
}
}
В этом случае на выходе будет 11
. :) scanf
будет рассматривать символ 'A'
как шестнадцатеричное представление 10.
В scanf() Все аргументы, которые вы передаете, являются указателями. У указателей нет поощрения по умолчанию, и очень важно, чтобы вы передавали спецификатор точного формата, который соответствует типу указателя.
для больше зазора: - Нажмите here!
«A» - это символ, а не целое число,% d сканирует целое число – reggaeguitar