Перво-наперво:
SCANF
не определяется языком.
CHAR
не определяется языком.
Хорошо, со всем этим ...
Функция scanf()
возвращает целое число. Это целое число - количество назначенных элементов ввода или значение макроса EOF
, если перед первым преобразованием произошел сбой ввода.
Вы не проверяли возвращаемое значение вызова scanf()
, поэтому не знаете, что произошло. Возможно, все работало нормально, или поток ввода мог завершиться до первого преобразования, или (не для% c), возможно, произошел сбой преобразования.
Проверьте возвращаемое значение scanf()
. Действительно, всегда проверяет возвращаемое значение всех функций .
char ch;
int result = scanf("%c", &ch);
if (result == 1) /* all ok */;
else if (result == 0) /* conversion failure: value of `ch` is indeterminate */;
else if (result == EOF) /* input failure; value of `ch` is indeterminate */;
Если результатом вызова scanf()
является EOF
, если вам нужна дополнительная информация о причине сбоя ввода, вы можете использовать feof()
и / или ferror()
.
else if (result == EOF) {
if (feof(stdin)) {
/* no data in input stream */
}
if (ferror(stdin)) {
/* error if input stream (media ejected? bad sector? ...?)
}
}
Чтобы ответить на ваш вопрос: what will promptChar() return?
Возвращает неопределенное значение типа char.
Вы можете последовать примеру библиотечной функции, которая работает с символами и вернуть int из promptChar()
. Это будет значение прочитанного символа, приведенное к unsigned char
или отрицательное значение int (EOF
) в случае ошибки. Прочитайте описание для fgetc()
, например.