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

Из нижеуказанных трех функций:

getc getchar & scanf

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

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

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

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

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

из руководства Beej по программированию на C

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

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

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

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

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

  • getchar_unlocked () VS scanf () VS cin
  • Scanf не сканирует символ% c, но пропускает утверждение, почему?
  • Программа не выполняет gets () после scanf (), даже используя fflush (stdin)
  • В чем разница между sscanf или atoi, чтобы преобразовать строку в целое число?
  • While-loop игнорирует scanf во второй раз
  • scanf не будет запрашивать ввод во второй раз
  • Как сканировать только целое число?
  • Разбор ввода с scanf в C
  • Когда следует использовать амперсанд с scanf ()
  • C - scanf () vs получает () vs fgets ()
  • Почему scanf ("% d", ) не потребляет '\ n'? в то время как scanf («% c»)?
  • Давайте будем гением компьютера.