getc Vs getchar Vs Scanf для чтения символа из stdin
Из нижеуказанных трех функций:
который является лучшим для чтения персонажа из stdin и почему?
- C - попытка чтения одного символа из stdin (и сбоя) w / scanf / getchar
- Почему scanf ("% d", ) не потребляет '\ n'? в то время как scanf («% c»)?
- В чем разница между sscanf или atoi, чтобы преобразовать строку в целое число?
- Разница между scanf и scanf_s
- что такое идентификаторы формата scanf ("% * s") и scanf ("% * d")?
Существуют ли какие-либо известные недостатки или ограничения для любой из этих функций, что делает их лучше других?
- Динамический ввод строки - с помощью scanf ("% as")
- Простой C scanf не работает?
- Использование «\ n» в scanf () в C
- Как работают функции puts и gets?
- что такое эквивалент Java sscanf для синтаксического анализа значений из строки с использованием известного шаблона?
- Почему пространство в моей команде scanf имеет значение?
- SegFault после scanf?
- scanf не будет запрашивать ввод во второй раз
Если вы просто хотите прочитать один символ из 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).