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
  • C / C ++ printf () перед вызовом scanf ()
  • Программа не ждет ввода пользователя с помощью scanf («% c», & yn);
  • Как использовать sscanf в циклах?
  • читать разделенный запятыми вход с scanf
  • scanf: «% » пропускает второй вход, но «% » - нет. Зачем?
  • scanf Пропуск
  • printf не печатать на консоли
  • Программа не выполняет gets () после scanf (), даже используя fflush (stdin)
  • Как читать строку с клавиатуры с помощью C? получение ошибки сегментации, проходящей в char *
  • C - scanf () vs получает () vs fgets ()
  • Interesting Posts

    Будет ли обновление до Windows 10 с 8.1 удалять существующий вирус и вредоносное ПО ..?

    Вернуть ключевое событие в EditText

    В чем разница между eq, eql, equal и equalp в Common Lisp?

    Hashcode и Equals для Hashset

    В какой области переменные модуля хранятся в node.js?

    Скопировать выделенный текст со ссылками, добавленными в обычный текст?

    «Переопределить метод суперclassа» Ошибки после импорта проекта в Eclipse

    Получение координат строки с использованием ITextExtractionStrategy и LocationTextExtractionStrategy в Itextsharp

    Как определить установленную версию MS-Office?

    извлечь часть даты из DateTime в C #

    Лучший способ отслеживания и итерации вкладок и окон с помощью WindowHandles с использованием Selenium

    Почему C ++ позволяет нам окружать имя переменной в круглых скобках при объявлении переменной?

    Внезапное всплывающее окно во всех браузерах на некоторых сайтах – Как удалить?

    Расширитель компонентов с декоратором базового classа

    Как добавить новую строку в datagridview программно

    Давайте будем гением компьютера.