Подтвердить что ты не робот

Getc Vs getchar Vs Scanf для чтения символа из stdin

Из следующих трех функций:

ЕОКП getchar & зсапЕ

который является лучшим для чтения персонажа из stdin и почему?

Существуют ли какие-либо известные недостатки или ограничения для любой из этих функций, которые делают один лучше другого?

4b9b3361

Ответ 1

Если вы просто хотите прочитать один символ из stdin, тогда getchar() является подходящим выбором. Если у вас более сложные требования, то getchar() будет недостаточно.

  • getc() позволяет вам читать из другого потока (например, один открыт с помощью fopen());
  • scanf() позволяет вам читать больше, чем только один символ за раз.

Наиболее распространенной ошибкой при использовании getchar() является попытка использовать переменную char для хранения результата. Вам нужно использовать переменную int, так как диапазон значений getchar() возвращает значение "в диапазоне unsigned char плюс одно отрицательное значение EOF". A char переменная не имеет достаточного диапазона для этого, что может означать, что вы можете путать полностью верный возврат символа с помощью EOF. То же самое относится к getc().

Ответ 2

от Beej Guide to C Programming

Все эти функции так или иначе читают один символ с консоли или с ФАЙЛА. Различия довольно незначительные, и вот описания:

getc() возвращает символ из указанного FILE. Из использования точка зрения, она эквивалентна одному вызову fgetc(), а fgetc() является немного более общий, чтобы видеть. Только реализация этих двух функции отличаются.

fgetc() возвращает символ из указанного FILE. Из использования точка зрения, эквивалентная тому же вызову getc(), за исключением того, что fgetc() является более распространенным, чтобы видеть. Только реализация две функции различаются.

Да, я обманул и использовал cut-n-paste, чтобы сделать этот последний абзац.

getchar() возвращает символ из stdin. Фактически, это то же самое, что и вызов getc (stdin).