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

Из нижеперечисленных трех функций:

getc getchar & scanf

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

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


person Jay    schedule 24.03.2010    source источник


Ответы (2)


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

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

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

person caf    schedule 24.03.2010
comment
Спасибо за ответ. Если в scanf я укажу только %c, то я смогу прочитать только один символ, верно? - person Jay; 24.03.2010
comment
Да, но это избыточно для этой цели. - person caf; 24.03.2010
comment
Серьезно перебор. На многих платформах getchar() — это макрос, который быстро возвращает символ (с буферизованным потоком) или использует fread() для получения символа. С scanf() возникает много ненужной работы. - person tomlogic; 24.03.2010
comment
Сэр, мне нужно кое-что спросить у вас, мы можем поболтать? - person Suraj Jain; 11.02.2017

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

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

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

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

Да, я сжульничал и использовал вырезание и вставку, чтобы сделать последний абзац.

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

person Dchris    schedule 02.06.2013