getc Vs getchar Vs Scanf для чтения символов из стандартного ввода - PullRequest
23 голосов
/ 24 марта 2010

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

ЕОКП getchar & зсапЕ

что лучше всего подходит для чтения символов со стандартного ввода и почему?

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

Ответы [ 2 ]

26 голосов
/ 24 марта 2010

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

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

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

5 голосов
/ 02 июня 2013

из руководства Биджа по программированию на С

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

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

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

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

getchar () возвращает символ из стандартного ввода. На самом деле, это так же, как вызов getc (stdin).

...