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).

  • Как использовать sscanf в циклах?
  • Как вы можете вводить пробелы с помощью scanf?
  • Scanf не будет выполняться во второй раз
  • Чтение строки с помощью scanf
  • Как сканировать строки с пробелами в них с помощью scanf ()?
  • Каков эффект завершения пробела в строке формата scanf ()?
  • C: Несколько scanf, когда я вводим значение для одного scanf, он пропускает второй scanf
  • getchar_unlocked () VS scanf () VS cin
  • Ищете эквивалент C # scanf
  • While-loop игнорирует scanf во второй раз
  • scanf regex - C
  • Давайте будем гением компьютера.