Это:
scanf("%d", &c);
Запрашивает scanf()
для чтения целочисленного значения со стандартного ввода. Функция scanf()
будет считывать со стандартного ввода столько символов, сколько необходимо, а затем анализирует их в целое число, сохраняя значение в переменной c
(т.е. по адресу, указанному &c
) , Возвращаемое значение scanf()
также указывает количество правильно проанализированных элементов, поэтому в этом случае вам следует проверить, является ли возвращенное значение 1
.
Это:
c = getchar();
Is запрос getchar()
для чтения одного символа из стандартного ввода. Функция getchar()
попытается прочитать символ и вернет его (приведенный к int
) в случае успеха. В случае ошибки или конца файла будет возвращено специальное целочисленное значение EOF
. Тот факт, что getchar()
возвращает int
, не означает, что функция будет анализировать ввод, как scanf("%d", ...)
. Действительно, возвращаемое значение имеет тип int
только потому, что необходимо отличать guish действительный символ от EOF
.
Чтобы узнать больше, см. Справочные страницы для scanf
и getchar
с помощью команды man
, например man scanf
. Обращаясь к страницам справочника, важно понимать семантику функции. Всегда читайте инструкцию . Кроме того, вы можете посмотреть его онлайн: scanf()
, getchar()
.
Если вы хотите отсканировать один символ используя getchar()
и преобразовать его в целое число, затем вы можете сделать следующее:
#include <stdio.h> // getchar(), puts()
#include <ctypes.h> // isdigit()
int main(void) }
int c;
c = getchar();
if (c == EOF) {
puts("Error!");
return 1;
}
if (!isdigit(c)) {
puts("Character is not a digit!");
return 1;
}
int value = c - '0';
// value now holds the integer corresponding to the digit that was read from input
/* ... */
return 0;
}
Примечание: c - '0'
работает, потому что символы, представляющие цифры, имеют последовательно увеличивающиеся значения в таблице ASCII (от 0x30 до 0x39). Смотрите также man ascii
.