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

из приведенных ниже трех функций:

getc функция getchar & функции scanf

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

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

2 ответов


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

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

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


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

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

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

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

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

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