- Чтение и запись символов
- Трудности использования getchar()
- Альтернативы getchar()
- putchar, putwchar
- Синтаксис
- Параметры
- Возвращаемое значение
- Комментарии
- Универсальное текстовое сопоставление функций
- Требования
- Урок 1. Часть 2: Инструкции языка Си printf, puts, putchar — вывод текста и других данных
- Функция puts в Си
- Функция putchar в Си
- Escape символы в Си или управление перемещением курсора
- Язык Си printf — функция вывода информации
- Арифметические операции в Си, оператор присваивания
- Прочитайте онлайн Язык Си — руководство для начинающих | ВВОД И ВЫВОД ОДНОГО СИМВОЛА: ФУНКЦИИ getchar( ) И putchar( )
Чтение и запись символов
Самыми простыми из консольных функций ввода/вывода являются getchar() , которая читает символ с клавиатуры, и putchar() , которая отображает символ на экране. Первая из этих функций ожидает, пока не будет нажата клавиша, а затем возвращает значение этой клавиши. Кроме того, при нажатии клавиши на клавиатуре на экране дисплея автоматически отображается соответствующий символ. Вторая же функция, putchar() , отображает символ на экране в текущей позиции курсора. Вот прототипы функций getchar() и putchar() :
Как видно из прототипа, считается, что функция getchar() возвращает целый результат. Однако возвращаемое значение можно присвоить переменной типа char , что обычно и делается, так как символ содержится в младшем байте. (Старший байт при этом обычно обнулен.) В случае ошибки getchar() возвращает EOF . (Макрос EOF определяется в и часто равен -1.)
Что же касается putchar() , то несмотря на то, что эта функция объявлена как принимающая целый параметр, она обычно вызывается с символьным аргументом. На самом деле из ее аргумента на экран выводится только младший байт. Функция putchar() возвращает записанный символ или, в случае ошибки, EOF .
В следующей программе продемонстрировано применение getchar() и putchar() . В этой программе с клавиатуры вводятся символы, а затем они отображаются на другом регистре. То есть символы, вводимые на верхнем регистре, выводятся на нижнем, а вводимые на нижнем — выводятся на верхнем. Чтобы остановить программу, введите точку.
(Эта программа не работает, правда, с кириллическими символами.)
Трудности использования getchar()
Использование getchar() может быть связано с определенными трудностями. Во многих библиотеках компиляторов эта функция реализуется таким образом, что она заполняет буфер ввода до тех пор, пока не будет нажата клавиша . Это называется построчно буферизованным вводом . Чтобы функция getchar() возвратила какой-либо символ, необходимо нажать клавишу . Кроме того, эта функция при каждом ее вызове вводит только по одному символу. Поэтому сохранение в буфере целой строки может привести к тому, что в очереди на ввод останутся ждать один или несколько символов, а в интерактивной среде это раздражает достаточно сильно. Хотя getchar() и можно использовать в качестве интерактивной функции, но это делается редко. Так что если предшествующая программа ведет себя не так, как ожидалось, то вы теперь знаете, в чем тут дело.
Альтернативы getchar()
Так как getchar() , имеющаяся в библиотеке компилятора, может оказаться неподходящей в интерактивной среде, то для чтения символов с клавиатуры может потребоваться другая функция. В стандарте языка С не определяется никаких функций, которые гарантировали бы интерактивный ввод, но их определения имеются буквально в библиотеках всех компиляторов С. И пусть в стандарте С эти функции не определены, но известны они всем! А известны они благодаря функции getchar() , которая для большинства программистов явно не подходит.
У двух из самых распространенных альтернативных функций getch() и getche() имеются следующие прототипы:
В библиотеках большинства компиляторов прототипы таких функций находятся в заголовочном файле . В библиотеках некоторых компиляторов имена этих функций начинаются со знака подчеркивания (_). Например, в Visual C++ компании Microsoft они называются _getch() и _getche() .
Функция getch() ожидает нажатия клавиши, после которого она немедленно возвращает значение. Причем, символ, введенный с клавиатуры, на экране не отображается. Имеется еще и функция getche() , которая хоть и такая же, как getch() , но символ на экране отображает. И если в интерактивной программе необходимо прочитать символ с клавиатуры, то часто вместо getchar() применяется getche() или getch() . Вот, например, предыдущая программа, в которой getchar() заменена функцией getch() :
Когда выполняется эта версия программы, при каждом нажатии клавиши соответствующий символ сразу передается программе и выводится на другом регистре. А ввод в строках не буферизируется. И хотя в кодах в этой книге функции getch() и getche() больше не встречаются, но они вполне могут пригодиться в тех программах, которые напишете вы.
Источник
putchar, putwchar
Записывает символ в поток stdout.
Синтаксис
Параметры
c
Символ, который требуется записать.
Возвращаемое значение
Возвращает записанный символ. Чтобы указать ошибку или условие конца файла, putc и putchar возвращают EOF; putwc и Putwchar возвращают WEOF. Для всех четырех подпрограмм используйте ferror или feof для проверки наличия ошибки или конца файла. Если для потокапередан пустой указатель, эти функции создают исключение недопустимого параметра, как описано в разделе Проверка параметров. Если выполнение может быть продолжено, они возвращают EOF или WEOF и применяют параметру «еинвал».
Дополнительные сведения об этих и других кодах ошибок см. в разделе _doserrno, errno, _sys_errlist и _sys_nerr.
Комментарии
Подпрограммы putc записывает один символ c в выходной поток в текущей позиции. Любое целое число может быть передано в putc, но записываются только младшие 8 бит. Подпрограммы putchar идентичны . Если возникает ошибка чтения, то в каждой подпрограмме для каждого потока устанавливается индикатор ошибки. putc и putchar похожи на fputc и _fputcharсоответственно, но реализуются как функции и как макросы (см. раздел Выбор между функциями и макросами). putwc и putwchar — это версии putc и putcharдля расширенных символов соответственно.
Версии с суффиксом _nolock идентичны за исключением того, что они не защищены от помех со стороны других потоков. Они могут выполняться быстрее, поскольку не создают дополнительную нагрузку, связанную с блокировкой работы других потоков. Используйте эти функции только в потокобезопасных контекстах, например в однопоточных приложениях или если вызываемая область уже обрабатывает изоляцию потоков.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.
Универсальное текстовое сопоставление функций
Подпрограмма TCHAR.H | &Не определено _UNICODE _MBCS | _MBCS определено | _UNICODE определено |
---|---|---|---|
_puttchar | putchar | putchar | putwchar |
Требования
Подпрограмма | Обязательный заголовок |
---|---|
putchar | |
putwchar | или |
консоль не поддерживается в приложениях универсальная платформа Windows (UWP). Стандартные дескрипторы потока, связанные с консолью, stdin, stdoutи stderr, должны быть перенаправляться до того, как функции времени выполнения C смогут использовать их в приложениях UWP. Дополнительные сведения о совместимости см. в статье Compatibility.
Источник
Урок 1. Часть 2: Инструкции языка Си printf, puts, putchar — вывод текста и других данных
Функция puts в Си
Функция puts в Си осуществляет вывод информации на экран. Параметром функции (параметр заключен в круглые скобки, именно он выводится на экран) могут быть данные одного из следующих типов:
- Вывод строкового литерала
begin writeln(‘Hello world!’); end.
var slovo: string; begin slovo:=’Hello world!’; writeln(slovo); end.
#define SLOVO «Hello world!» main()
const SLOVO=’Hello world!’; begin writeln(SLOVO); end.
Функция putchar в Си
Функция putchar в Си необходима для вывода единичного символа на экран. Параметром функции могут быть данные следующих типов:
- Вывод символьного литерала
#define C ‘H’ main()
В некоторых компиляторах при использовании функции putchar в Си необходимо подключить в код файл заголовков STDIO.H с помощью директивы #include. В подобных компиляторах функция putchar() является производной другой функции — putc(), которая осуществляет вывод на специальные устройства, такие как диск или принтер.
Пример подключения файла заголовка:
Escape символы в Си или управление перемещением курсора
В Си есть возможность управлять перемещением курсора на экране, т.е. переходить на другую строку, двигаться на n позиций в строны и т.п. Для этого используются специальные коды — escape-последовательности или escape-символы. Последовательность начинается с символа \ , который указывает на то, что символы, расположенные за ним, являются escape-символами. Компилятор, встречая обратную косую черту, не отображает следующие за ней символы, а выполняет действие, на которое они указывают.
\n – переход на новую строку :
После слова Ура! произойдет переход на начало следующей строки.
Отображает строку с цифрой 0 в крайней левой позиции экрана и цифры от 1 до 5 через табуляцию
\r – возврат каретки к началу той же строки :
puts («1\r2»); // произойдет затирание
\b – сдвиг курсора на одну позицию влево
\’ — отображает одинарную кавычку
\» — отображает двойную кавычку
\\ — отображает обратную косую черту
Язык Си printf — функция вывода информации
Языки Си и Си++ имеют более сложную и комплексную функцию для вывода информации, называемую printf(). Она позволяет выводить на экран данные любого типа и работать с несколькими аргументами.
Кроме того, функция Си printf() позволяет осуществлять так называемый форматированный вывод данных.
Самый обычный случай, когда функция printf() просто заменяет функцию puts() для вывода строки:
#define NOTE «Привет!» main()
Но целесообразней использовать функцию для осуществления форматированного вывода:
Программа выведет на экран «Mne ispolnilos 12 let».
Указатели формата:
%d целое число
%u беззнаковое целое число
%f вещественное число типа float или double
%e вещественное число в экспоненциальной форме
%c символ
%s строка
Арифметические операции в Си, оператор присваивания
+ сложение
– вычитание
* умножение
/ деление
% получение остатка от деления нацело
Оператор присваивания
= простое присваивание a=b
++ унарный инкремент a++ (или ++a)
— унарный декремент
+= a+=b если a=3, b=4, то a=7
–= a-=b
*= a*=b
/= a/=b
%= a%=b если a=10, b=3 то а=1
сhar item[] = «Винчестер»; float cost = 3000.50; float markup = 0.75;
Добавьте в программу функцию printf(), которая выводит на экран следующие сообщения:
Наименование товара: Жесткий диск Цена за 1 упаковку: 3000.50 Наценка: 0.75
Обратите внимание на выравнивание.
Источник
Прочитайте онлайн Язык Си — руководство для начинающих | ВВОД И ВЫВОД ОДНОГО СИМВОЛА: ФУНКЦИИ getchar( ) И putchar( )
ВВОД И ВЫВОД ОДНОГО СИМВОЛА: ФУНКЦИИ getchar( ) И putchar( )
Функция getchar() получает один символ, поступающий с пульта терминала (и поэтому имеющий название), и передает его выполняющейся в данный момент программе. Функция putchar( ) получает один символ, поступающий из программы, и пересылает его для вывода на экран. Ниже приводится пример очень простой программы. Единственное, что она делает, это принимает один символ с клавиатуры и выводит его на экран. Мы будем постепенно модифицировать данную программу до тех пор, пока она не приобретет ряд полезных возможностей. Из дальнейшего вы узнаете, что представляют из себя эти возможности, но сначала давайте посмотрим на наш скромный первый вариант
ch = getchar( ); /* строка 1 */
putchar (ch); /* строка 2 */
Для большинства систем спецификации функций getchar и putchar содержатся в системном файле stdio.h, и только по этой причине мы указали данный файл в программе. Использование такой программы приводит к следующему:
Обозначение [ввод] служит указанием, что вы должны нажать клавишу [ввод]. В любом случае, первый символ g вы набираете на клавиатуре сами, а второй выводится компьютером.
Результат зависит от того, есть в вашей системе «буферизованный» ввод или нет. Если перед тем как получить на экране ответ, вы должны нажать клавишу [ввод], то буферизация в вашей системе имеется. Давайте закончим рассмотрение функций getchar( ) и putchar( ) перед тем, как приступить к обсуждению понятия буферов.
Функция getchar( ) аргументов не имеет (т. е. при ее вызове в круглые скобки не помещается никакая величина). Она просто получает очередной поступающий символ и сама возвращает его значение выполняемой программе. Например, если указанная функция получает букву Q, ее значением в данный момент будет эта буква. Оператор, приведенный в строке 1, присваивает значение функции getchar( ) переменной ch.
Функция putchar( ) имеет один аргумент. При ее вызове необходимо в скобках указать символ, который требуется вывести на печать. Аргументом может быть одиночный символ (включая знаки представляемые управляющими последовательностями, описанными в гл. 3), переменная или функция, значением которой является одиночный символ. Правильным обращением к функции putchar( ) является указание любого из этих аргументов при ее вызове.
putchar (‘S’); /* напомним, что символьные */
putchar (‘\n’); /* константы заключаются в апострофы */
putchar (ch); /* ch — переменная типа char */
Форму записи, приведенную в последнем примере, мы можем использовать для того, чтобы представить нашу программу в следующем виде:
Такая запись очень компактна и не требует введения вспомогательных переменных. Кроме того, в результате компиляции такая программа оказывается более эффективной, но, пожалуй, менее понятной.
После того как мы ознакомились с работой этих двух функций, можно перейти к обсуждению понятия буферов.
Источник