Getc Vs getchar Vs Scanf для чтения символа из stdin
Из следующих трех функций:
ЕОКП
getchar &
зсапЕ
который является лучшим для чтения персонажа из stdin и почему?
Существуют ли какие-либо известные недостатки или ограничения для любой из этих функций, которые делают один лучше другого?
Ответ 1
Если вы просто хотите прочитать один символ из stdin, тогда getchar() является подходящим выбором. Если у вас более сложные требования, то getchar() будет недостаточно.
getc() позволяет вам читать из другого потока (например, один открыт с помощью fopen());
scanf() позволяет вам читать больше, чем только один символ за раз.
Наиболее распространенной ошибкой при использовании getchar() является попытка использовать переменную char для хранения результата. Вам нужно использовать переменную int, так как диапазон значений getchar() возвращает значение "в диапазоне unsigned char плюс одно отрицательное значение EOF". A char переменная не имеет достаточного диапазона для этого, что может означать, что вы можете путать полностью верный возврат символа с помощью EOF. То же самое относится к getc().
Все эти функции так или иначе читают один символ с консоли или с ФАЙЛА. Различия довольно незначительные, и вот описания:
getc() возвращает символ из указанного FILE. Из использования точка зрения, она эквивалентна одному вызову fgetc(), а fgetc() является немного более общий, чтобы видеть. Только реализация этих двух функции отличаются.
fgetc() возвращает символ из указанного FILE. Из использования точка зрения, эквивалентная тому же вызову getc(), за исключением того, что fgetc() является более распространенным, чтобы видеть. Только реализация две функции различаются.
Да, я обманул и использовал cut-n-paste, чтобы сделать этот последний абзац.
getchar() возвращает символ из stdin. Фактически, это то же самое, что и вызов getc (stdin).