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. На самом деле, это то же самое, что называя еокп(стандартного ввода).